9
Declarations
[dcl.dcl]
9.2
Specifiers
[dcl.spec]
9.2.7
The
constinit
specifier
[dcl.constinit]
1
#
The
constinit
specifier shall be applied only to a declaration of a variable with static or thread storage duration
.
If the specifier is applied to any declaration of a variable, it shall be applied to the initializing declaration
.
No diagnostic is required if no
constinit
declaration is reachable at the point of the initializing declaration
.
2
#
If a variable declared with the
constinit
specifier has dynamic initialization (
[basic.
start.
dynamic]
), the program is ill-formed, even if the implementation would perform that initialization as a static initialization (
[basic.
start.
static]
)
.
[
Note
1
:
The
constinit
specifier ensures that the variable is initialized during static initialization
.
—
end note
]
3
#
[
Example
1
:
const
char
*
g
(
)
{
return
"dynamic initialization"
;
}
constexpr
const
char
*
f
(
bool
p
)
{
return
p
?
"constant initializer"
:
g
(
)
;
}
constinit
const
char
*
c
=
f
(
true
)
;
// OK
constinit
const
char
*
d
=
f
(
false
)
;
// error
—
end example
]