以下代码片段无法在MSVC C++中编译(2015,2017):
template <typename Type>
struct Base : public Type
{
Base(const Type & type)
: Type(type)
{}
};
struct SomeType
{
int Type() { return 42; }
};
struct Wrong : public Base<SomeType>
{
Wrong(const SomeType & type)
: Base<SomeType>(type)
{}
};
SomeType some;
Wrong wrong(some);
Run Code Online (Sandbox Code Playgroud)
编译器很困惑,并且Type通过调用Type()我尝试派生的类的方法来解释调用构造函数.GNU C++编译器的代码没有问题.
重命名模板参数在Base类声明中输入不同的东西(不与任何基类方法冲突)解决了这个问题.添加类似的东西 : (typename Type)(type)没有帮助.
这是MSVC C++编译器的错误吗?解决这些问题的任何提示?