我目前正在更新我的语言知识(至C ++ 17)。我试图使用gcc编译该代码,但无法弄清楚,所以我尝试了MSVC和clang,但对于此代码,它们似乎都还不错–这一段代码有什么问题吗?
gcc似乎在抱怨实例化元组<>,没有模板参数,这很奇怪:
prog.cc:在'C :: C(U && ...)的实例中[U = {const A&,const B&}; T = {}]': prog.cc:32:14:从这里开始 prog.cc:12:49:错误:没有匹配的函数调用'std :: tuple <> :: tuple(const A&,const B&)' 12 | :容器(std :: forward(params)...) | ^
#include <tuple>
struct A {};
struct B {};
template<typename... T>
struct C
{
template<typename... U>
C(U&&... params)
: container( std::forward<U>(params)... )
{}
std::tuple<T...> container;
};
template <class... T>
C(T&&...)->C<std::decay_t<T>...>;
int main(void)
{
const A a;
const B b;
C c2(a, b); // <-- this fails on gcc, okay on msvc and clang
}