我正在尝试使用clang为嵌套模板类重载二元运算符+并得到错误invalid operands to binary expression. Note: candidate template ignored: couldn't infer template argument T
。类似的东西:
template<typename T>
class Container
{
struct Iterator {
template<typename U>
friend typename Container<U>::Iterator operator+(size_t, typename Container<U>::Iterator const&);
};
};
template<typename U>
typename Container<U>::Iterator
operator+(size_t, typename Container<U>::Iterator const&)
{
return Container<U>::Iterator{};
}
有没有办法使用clang编译器为嵌套模板类重载二元运算符?
可以使用C ++ 17。
答案 0 :(得分:2)
不要让内部功能成为模板。只需将其设为非模板非成员friend
并将其定义为内联:
template<typename T>
class Container
{
struct Iterator {
friend Iterator operator+(size_t, Iterator const&) {
return {};
}
};
};
这适用于C ++ 11。 C ++ 03如果你在回归中没有{}
。