【发布时间】:2021-11-01 16:27:35
【问题描述】:
谁能解释一下为什么下面的代码可以在 GCC 上编译,但不能在 Visual Studio 中编译。
我得到 error C2244: 'MyTemplate::List': unable to match function definition to an existing declaration 在注明的行。
#include <array>
enum class MyEnum
{
MAX = 5,
};
template<typename E>
class MyTemplate
{
public :
static const int NUMBER = static_cast<int>(E::MAX);
std::array<int, NUMBER> List();
};
template<typename E>
std::array<int, MyTemplate<E>::NUMBER> MyTemplate<E>::List() // ERROR
{
return std::array<int, MyTemplate<E>::NUMBER>();
}
int main()
{
MyTemplate<MyEnum> myClass;
}
我认为这是 GCC 允许而 VS 不允许的非标准我正在做的事情,但我不知道是什么。 CLion 对代码也很满意。
鉴于this 的回答,它也可能是VS 中的一个错误,虽然具体情况不同,但错误消息是相同的。然而,在我的例子中,模板看起来很简单,只涉及一个参数并且没有嵌套。
【问题讨论】:
标签: c++ gcc visual-c++