小编Fre*_*nix的帖子

模板参数名称与MSVC C++中的方法冲突

以下代码片段无法在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++编译器的错误吗?解决这些问题的任何提示?

c++ visual-c++

8
推荐指数
1
解决办法
141
查看次数

标签 统计

c++ ×1

visual-c++ ×1