Я составителя следующий тестовый код с лязгом:Динамическая инициализация класса перечислений внутри шаблона структуры
template<typename T> struct S1
{
struct S2{
enum class E1;
enum class E2: T;
enum class E3: short;
};
typename S2::E1 b1;
typename S2::E2 b2;
typename S2::E3 b3;
enum class S1::S2::E1 {e11,e12};
enum class S1::S2::E2 : T {e21,e22};
enum class S1::S2::E3 : short {e31,e32};
};
template struct S1<int>;
Я получил сообщение об ошибке: специализация шаблона или определение требует список параметров шаблона, соответствующего вложенного типа «S1 < T> ». Я думаю, так как структура S1 в настоящее время определяется при добавлении элемента в
enum class S1::S2::E1 {e11,e12}
enum class S1::S2::E2 : T {e21,e22};
enum class S1::S2::E3 : short {e31,e32};
компилятор не знает, что T, так как S1 еще не инстанцирован и, следовательно, T не может быть решена. Таким образом, компилятор не знает размер элементов перечисления и, следовательно, генерирует ошибку. Это верно? Это указано в стандартах?
Примечание: gcc не выбрасывает такую ошибку.
Спасибо. Я понял! – sarda