以下内容无法使用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的典型用例。
问题是,哪个编译器正确?