铛:候选模板被忽略:替换失败:typedef'type'不能用类说明符引用

时间:2019-01-15 23:20:17

标签: c++ c++11 templates variadic-templates template-meta-programming

与GCC 5相比,Clang 6抱怨以下错误:

  

候选模板被忽略:替换失败[with U = char,Us =]:typedef'type'不能用类说明符引用   元组(U && u,Us && ... rest):m_element(:: std :: forward(u)),m_rest(:: std :: forward(rest ...)...)

我将自己的元组实现与

一起使用
//! Declaration of tuple typename with multiple elements
template<typename T, typename... Ts>
class Tuple<T, Ts...>
{
public:
    T m_element;
    Tuple<Ts...> m_rest;

    template<typename U,
             typename... Us,
             typename = class ::std::enable_if<!::std::is_base_of<Tuple,typename ::std::decay<U>::type>::value>::type>
    Tuple(U&& u, Us&&... rest) : m_element(::std::forward<U>(u)), m_rest(::std::forward<Us>(rest)...)
    {
    }
};

template<typename... Ts>
Tuple<typename ::std::decay<Ts>::type...> make_tuple(Ts&&... elements)
{
    return Tuple<typename ::std::decay<Ts>::type...>(::std::forward<Ts>(elements)...);
}

clang与GCC有何不同?我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

clang与GCC有何不同?我该如何解决?

不确定谁是正确的人,不确定是否能解决您的问题(没有最小但完整的问题示例,我无法检查),但是我遇到一个错误(仅适用于clang ++),当我更改{{1} }和class

所以我建议

typename