为什么g ++ 8.x无法编译此代码? (SFINAE无法正常工作)

时间:2019-05-01 17:27:18

标签: c++ g++ c++17

(我为标题表示歉意,但我想不出更具描述性的内容)

This code在g ++ 8.x中无法编译,但在所有其他具有C ++ 17功能的编译器(包括g ++ 7.x)中进行编译:

#include <variant>
#include <type_traits>

template<class... Ts> struct S
{
    template<std::size_t idx> using vtype = 
        std::variant_alternative_t<idx, std::variant<Ts...>>;
    template<bool B, class T = void> using enable_if = std::enable_if_t<B, T>;
    template<class T, class U> static constexpr bool is_same = std::is_same<T, U>::value;

    template<std::size_t idx, enable_if< is_same<vtype<idx>, int>>...>
    static bool foo() { return true ; }

    template<std::size_t idx, enable_if<!is_same<vtype<idx>, int>>...>
    static bool foo() { return false; }
};

auto x = S<int, char, float>::foo<1>();

为什么无法编译?

(我认为解决方法是将SFINAE +重载替换为if constexpr

0 个答案:

没有答案