相关疑难解决方法(0)

在switch语句的条件下具有模板和非模板转换运算符的类

问题最初出现在这个问题上.请考虑以下代码:

class Var
{
public:

    operator int () const
    { return 0; }

    template <typename T>
    operator T () const
    { return T(); }

};

int main()
{
    Var v;
    switch (v)
    { }
}
Run Code Online (Sandbox Code Playgroud)

没有operator int() const { return 0; },g ++和clang都会拒绝代码.

然而,上面的代码,与所述operator int()接受由铛但拒绝由g ++与以下错误:

main.cpp:17:14: error: default type conversion can't deduce template argument for 'template<class T> Var::operator T() const'
     switch (v)
              ^
Run Code Online (Sandbox Code Playgroud)

哪个编译器正确?

c++ language-lawyer implicit-conversion c++11 c++14

26
推荐指数
2
解决办法
1379
查看次数

标签 统计

c++ ×1

c++11 ×1

c++14 ×1

implicit-conversion ×1

language-lawyer ×1