铛。嵌套模板的二元运算符重载

时间:2018-01-19 07:50:33

标签: c++ templates clang operators c++17

我正在尝试使用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。

1 个答案:

答案 0 :(得分:2)

不要让内部功能成为模板。只需将其设为非模板非成员friend并将其定义为内联:

template<typename T>
class Container
{
  struct Iterator {
    friend Iterator operator+(size_t, Iterator const&) {
      return {};
    } 
  };
};

这适用于C ++ 11。 C ++ 03如果你在回归中没有{}