Следующий код:
template <class T1>
struct A1
{
template <int INDEX>
struct A2 { /* ... */ };
template <>
struct A2<-1> { /* ... */ };
};
int main()
{
A1<int>::A2<-1> x;
}
Дает эту ошибку:
prog.cpp: 7: 13: ошибка: явная специализация в области без пространства имен
'struct A1<T1>'
prog.cpp: 8: 10: ошибка: параметры шаблона, не используемые в частичной специализации:
prog.cpp: 8: 10: ошибка:'T1'
Как лучше обойти эту ошибку? Я пробовал это:
template <class T1>
struct A1
{
template <int INDEX, class DUMMY = void>
struct A2 { /* ... */ };
template <class DUMMY>
struct A2<-1, DUMMY> { /* ... */ };
};
int main()
{
A1<int>::A2<-1> x;
}
Кажется, что он работает, но также кажется немного выдумкой.
Есть ли лучший способ обойти это?
Я просмотрел предыдущие ответы и мог находить только те функции с функциями в классах, а не классы в классах. Я также нашел трюк "DUMMY" в других ответах, но задавался вопросом, есть ли более приятное решение.
Кроме того, в качестве побочного примечания, это первый код, разрешенный С++ 0x?