Я наткнулся на ответ на вопрос, поддерживает ли 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() и связанные с ним экземпляры шаблонов в одной единице перевода происходят в конкретный, предсказуемый порядок?
Я наткнулся на ответ на вопрос, поддерживает ли C++ счетчики времени компиляции. Решение основано на метафункции unique_id() для генерации уникальных идентификаторов во время компиляции путем использования создания дружественной функции в шаблоне класса. Вот пример, иллюстрирующий вопрос: [code]template struct A { static constexpr int id = N; };
template struct B { static constexpr int id = N; };
void func() { struct C { static constexpr int id = unique_id(); }; // Instantiation 3 struct D { static constexpr int id = unique_id(); }; // Instantiation 4 } [/code] Мой вопрос:
[b]Гарантирует ли стандарт C++, что все вызовы unique_id() и связанные с ним экземпляры шаблонов в одной единице перевода происходят в конкретный, предсказуемый порядок?[/b]