Files
cppdraft_translate/cppdraft/dcl/constinit.md
2025-10-25 03:02:53 +03:00

2.0 KiB

[dcl.constinit]

9 Declarations [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 or to a structured binding declaration ([dcl.struct.bind]).

[Note 1:

A structured binding declaration introduces a uniquely named variable, to which the constinit specifier applies.

— end note]

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 2:

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); // OKconstinit const char * d = f(false); // error — end example]