问题最初出现在这个问题上.请考虑以下代码:
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)
哪个编译器正确?