Примеры объявления constinit, недостижимого в точке инициализирующего объявления
Из dcl.constinit:
Диагностика не требуется, если объявление constinit недоступно в точке объявления инициализации.
Что это значит? Думаю, примера будет достаточно.
Что-то динамически инициализированное просто неправильно сформировано (из той же ссылки), так что это не так.
1 ответ
Предположим, у вас есть одна единица перевода, которая объявляет символ следующим образом:
// a.cc
#include <iostream>
extern constinit bool has_constinit;
int
main()
{
std::cout << std::boolalpha << has_constinit << std::endl;
}
Теперь предположим, что единица перевода, определяющая символ, не объявляет его.constinit
:
// b.cc
#include <cstdlib>
bool has_constinit = std::getenv("CONSTINIT");
Вы можете скомпилировать и скомпоновать эти два файла вместе без ошибок, даже если это не делает того, что вы хотели, потому чтоhas_constinit
инициализируется динамически.