为什么我不能在 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() {}
没有人认真探索过这样的扩展,它很容易与 其他 可能更有价值的概念语法扩展冲突。
考虑这段代码:
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() {}
没有人认真探索过这样的扩展,它很容易与 其他 可能更有价值的概念语法扩展冲突。