C ++:嵌套模板类错误“在非命名空间范围内显式专门化”

问题描述

|| 如下代码
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:错误:非命名空间范围ѭ1中的显式专业化      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”技巧,但想知道是否有更好的解决方案。 另外,作为附带说明,C ++ 0x允许使用第一个代码吗?     

解决方法

        在不专门化ѭ5的情况下,不允许显式地专门化
A2
(第14.7.3 / 18节)。 C ++ 0x具有相同的限制(n3242§14.7.3/ 16)。同时,允许嵌套类的部分专业化。因此,使用虚拟类的技巧是可以的。