为什么我不能在 class 范围内声明一个概念?

Why can't I declare a concept at class scope?

考虑这段代码:

struct A
{
    template <typename T>
    concept foo = true;
};

它不编译。我的 Clang 10 给了我 error: concept declarations may only appear in global or namespace scope,GCC 说了类似的话。

是否有不允许的原因?我不明白为什么它不能工作,即使封闭的 class 是一个模板。

出现的根本困难是概念可能变得依赖:

template<class T>
struct A {
  template<T::Q X>
  void f();
};

X一个non-type(从属)类型T::Q的模板参数(在C++20中不需要typename),还是一个受概念 T::Q?

约束的类型模板参数

规则是前者;我们需要新的 syntax(按照 typename/template)来表达另一种可能性:也许像

template<T::concept Q X> requires T::concept R<X*>
void A::g() {}

没有人认真探索过这样的扩展,它很容易与 其他 可能更有价值的概念语法扩展冲突。