考虑以下代码:
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/