Я столкнулся с изумительным ответом этого Т. ( edit: который я сейчас считаю неправильным ) и у меня есть дополнительный вопрос. Пожалуйста, рассмотрите код, в котором я использую постоянно инициализируемые константные переменные целочисленных типов, объявленные в глобальной области пространства имен, чтобы либо постоянно инициализировать постоянные статические члены данных, либо объявлять члены массива данных моих классов. Пример для лучшей иллюстрации:
const int internal_linkage_constant = 1;
class ExternalLinkageClass
{
static const int constexpr_value = internal_linkage_constant; // #1
int arr[internal_linkage_constant]; // #2
};
Определения всех этих классов находятся в заголовочных файлах и могут быть общими для нескольких единиц перевода. Глобальные константы должны быть определены до этих определений и по своей природе не могут иметь внешнюю связь для использования в константных выражениях .
Теперь мой вопрос: приводят ли такие инициализации к неопределенному поведению из-за нарушения ODR?