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

Hol*_*Cat 23 c++ c++-concepts c++20

考虑这个代码:

struct A
{
    template <typename T>
    concept foo = true;
};
Run Code Online (Sandbox Code Playgroud)

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

有理由不允许吗?我不明白为什么它不能工作,即使封闭类是一个模板。

Dav*_*ing 27

会出现的基本困难是概念可能变得依赖

template<class T>
struct A {
  template<T::Q X>
  void f();
};
Run Code Online (Sandbox Code Playgroud)

X(依赖)类型的非类型模板参数(在 C++20 中T::Q不需要typename),还是受概念约束的类型模板参数T::Q

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

template<T::concept Q X> requires T::concept R<X*>
void A::g() {}
Run Code Online (Sandbox Code Playgroud)

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