c++ - 为什么我不能在类范围内声明概念?

标签 c++ c++20 c++-concepts

考虑以下代码:

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/

相关文章:

c++ - 是否有用于从点语言字符串制作 png 的 C++ 函数?

c++ - 在 Yocto 中使用 Cmake 构建 Qt5

c++ - 协程和带有静态变量的函数有什么区别?

c++ - 是否可以使用 c++20 的概念来模拟多态性?

c++ - boost 概念检查 operator() 重载

c++ - VC++,x86上的/volatile:ms

c++ - 创建对象时出现段错误

c++ - 概念要求中的析取

c++ - 将奇异对齐的对象置于协程状态是否是定义的行为?

c++ - 为什么 std::derived_from 概念是通过添加 cv 限定符的附加可转换性测试来实现的?