开关和SFINAE中的类型推导,gcc与clang

时间:2018-07-13 16:55:58

标签: c++ c++11 gcc clang++

我注意到使用以下代码在Clang和GCC之间的行为有所不同:

class convertible {
public:
    operator int() { return 1; }

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


int main () {
    convertible x;
    switch (x) {}  // Clang: OK   GCC: Compile error
    return 0;
}

GCC返回error: default type conversion can't deduce template argument for ‘template<class T> convertible::operator T()’

Clang编译代码没有错误并调用operator int()

我正在使用Clang 6和GCC8。两者都使用std = c ++ 11

在这种情况下哪个编译器是正确的?

0 个答案:

没有答案