C++:如何强制模板化类型来实现某个运算符?

C++: How to enforce the templated type to implement a certain operator(s)?

9 年前 (C++11) 有一个 similar question ,也许更新的标准提供了这个。

我想确保我正在编写的模板化 class 只有在使用的类型实现某些运算符时才能实例化,例如 <.

template <typename T>
class XX {
private:
    T foo;
public:
    bool continiumTransfunctioneer(const T zoo){return zoo < foo;}
    // ...
};

我知道如果不满足该要求,代码将无法编译,但来自编译器的消息可能非常冗长 - 我希望能够预先警告用户。

这是使用 C++20 concepts 的一个很好的用例:

template <typename T>
  requires requires (const T& x, const T& y) { x < y; }
class XX {
 private:
  T foo;
 public:
  bool continiumTransfunctioneer(const T& zoo) const { return zoo < foo; }
};

Demo.