Предусматривает ли стандарт C++ порядок создания экземпляров шаблонов классов в единице перевода?C++

Программы на C++. Форум разработчиков
Anonymous
Предусматривает ли стандарт C++ порядок создания экземпляров шаблонов классов в единице перевода?

Сообщение Anonymous »

Я наткнулся на ответ на вопрос, поддерживает ли C++ счетчики времени компиляции. Решение основано на метафункции unique_id() для генерации уникальных идентификаторов во время компиляции путем использования создания дружественной функции в шаблоне класса.
Вот пример, иллюстрирующий вопрос:

Код: Выделить всё

template 
struct A { static constexpr int id = N; };

template 
struct B { static constexpr int id = N; };

template 
void foo();

foo(); // Instantiation 1
foo(); // Instantiation 2

void func() {
struct C { static constexpr int id = unique_id(); }; // Instantiation 3
struct D { static constexpr int id = unique_id(); }; // Instantiation 4
}
Мой вопрос:

Гарантирует ли стандарт C++, что все вызовы unique_id() и связанные с ним экземпляры шаблонов в одной единице перевода происходят в конкретный, предсказуемый порядок?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ons-within

Вернуться в «C++»