gpt4 book ai didi

c++ - clang : candidate template ignored: substitution failure: typedef 'type' cannot be referenced with a class specifier

转载 作者:搜寻专家 更新时间:2023-10-31 02:04:06 29 4
gpt4 key购买 nike

与 GCC 5 相比,Clang 6 提示以下错误:

candidate template ignored: substitution failure [with U = char, Us = ]: typedef 'type' cannot be referenced with a class specifier Tuple(U&& u, Us&&... rest) : m_element(::std::forward(u)), m_rest(::std::forward(rest...)...)

我使用自己的 Tuple 实现

//! 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 有何不同?我该如何解决这个问题?

谢谢!

最佳答案

What is clang doing differently than GCC? And how can I fix this?

不确定谁是对的,也不确定这能解决您的问题(没有一个最小但完整的问题示例,我无法检查它)但是我有一个错误(仅限 clang++),当我更改 类时该错误消失了 带有 typename

所以我建议

template<typename U,
typename... Us,
// ........VVVVVVVV <--- "typename" here, not "class"
typename = typename ::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)...)
{ }

关于c++ - clang : candidate template ignored: substitution failure: typedef 'type' cannot be referenced with a class specifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54208256/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com