gpt4 book ai didi

c++ - 为什么 Visual C++ 不能部分特化模板中的类?

转载 作者:太空狗 更新时间:2023-10-29 23:11:31 26 4
gpt4 key购买 nike

当我尝试在 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。

三个问题:

  1. 如果部分特化不是部分特化,它在做什么?

  2. 为什么会这样?是 bug,还是这段代码真的有问题?

  3. 是否有一种解决方法可以让您仍然在内部模板类中使用内部模板类,或者是将模板参数移到外部的唯一解决方案?

最佳答案

这是 Visual C++ 2015 中 C++ 实现的一个已知限制(许多限制之一)。

这在 Visual C++ 2017 中确实有效,因此可能需要升级版本。

关于c++ - 为什么 Visual C++ 不能部分特化模板中的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49993181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com