当我尝试在Visual C ++(2015)
中运行此代码时template<int V>
struct outer
{
template<int U, bool>
struct inner;
};
template<int V>
template<bool B>
struct outer<V>::inner<V, B> { enum { value = 0 }; };
int main()
{
return outer<1>::inner<1, false>::value;
}
我收到错误
Temp.cpp(13): error C2027: use of undefined type 'outer<1>::inner<1,false>'
Temp.cpp(13): note: see declaration of 'outer<1>::inner<1,false>'
Temp.cpp(13): error C2065: 'value': undeclared identifier
然而,it compiles and runs fine on GCC和Clang。
三个问题:
如果部分特化没有部分专业化, 它在做什么?
为什么会这样?这是一个错误,或者这个代码真的有问题吗?
是否有一种解决方法可以让你仍然在内部模板类中使用内部模板类,或者是将模板参数移到外面的唯一解决方案?
答案 0 :(得分:0)
这是Visual C ++ 2015(其中之一)中C ++实现的一个已知限制。
这在Visual C ++ 2017中有效,因此可能需要进行版本升级。