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)
没有人认真探索过这样的扩展,它很容易与可能更有价值的概念语法的其他扩展发生冲突。