考虑以下代码:

struct A
{
    template <typename T>
    concept foo = true;
};
它不会编译。我的Clang 10给了我error: concept declarations may only appear in global or namespace scope,GCC说了类似的话。
有什么理由不允许这样做吗?即使封闭的类是模板,我也看不出为什么它无法工作。

最佳答案

可能出现的基本困难是,概念可能会成为依赖的:

template<class T>
struct A {
  template<T::Q X>
  void f();
};
X是(依赖的)T::Q类型的非类型模板参数(在C++ 20中不需要typename),还是由T::Q概念约束的类型模板参数?
规则是前者;我们将需要新的语法(以及typename/template的代码行)来表达另一种可能性:也许像
template<T::concept Q X> requires T::concept R<X*>
void A::g() {}
没有人认真研究过这种扩展,它很容易与可能更有值(value)的其他概念语法扩展冲突。

关于c++ - 为什么我不能在类范围内声明概念?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64252077/

10-12 01:29
查看更多