是否可以强制概念有效以避免 std::variant 递归概念检查错误?

Nic*_*oni 6 c++ c++-concepts c++20

由于概念检查递归,我无法在 clang++16 上编译以前的工作代码。编译器给我以下错误:

错误:满足约束 'requires { { __t < __u } -> __boolean_testable; { __u < __t } -> __boolean_testable; }' 取决于它自己

这是复制错误的最小代码,适用于以前的版本:

#include <vector>
#include <variant>
#include <iostream>

struct var;
typedef std::vector<var> var_vector;
typedef std::variant<int, var_vector> var_base_type;

struct var : public var_base_type {
  using var_base_type::var_base_type;
  bool operator<(const var &to) const {
    if (index() != to.index())
      return index() < to.index();
    if (holds_alternative<int>(*this))
      return get<int>(*this) < get<int>(to);
    if (holds_alternative<var_vector>(*this))
      return get<var_vector>(*this) < get<var_vector>(to);
    return false;
  }
};

int main() {
  std::cout << (var(10) < var(20)) << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

概念语法中有没有办法强制概念在类型中有效var_vector