Примеры объявления 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инициализируется динамически.

Другие вопросы по тегам