可变参数类模板推导在gcc 8.2中失败,在clang和msvc中编译

时间:2018-11-18 00:42:52

标签: c++ templates gcc language-lawyer c++17

以下内容无法使用gcc 8.2 -std = c ++ 17进行编译(带有或不带有推导指南),但可以使用clang(甚至clang 5)和最新的msvc进行编译,如您所见here

template <class... Ts>
struct A
{
    template <class... T>
    A(T... any)
        : tuple_{std::tuple{any...}}
    {

    }

    std::tuple<Ts...> tuple_;
};

template<class ... T>
A(T... any)->A<decltype(any)...>;

int main()
{
    auto f = [](int){};
    auto a1 = A{7};
    auto a2 = A{f,7};
}

据我所知,我在这里没有做任何奇怪的事情,我认为这将是CTAD的典型用例。

问题是,哪个编译器正确?

0 个答案:

没有答案