元组周围的可变参数模板包装器

时间:2019-04-03 08:26:48

标签: c++ c++17

我目前正在更新我的语言知识(至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
}

0 个答案:

没有答案