217得票5回答
为什么我们需要“需要需要”?

C++20约束的一个要点是,在某些情况下,你必须写requires requires。例如,来自[expr.prim.req]/3的这个示例: 一个requires-expression也可以作为requires-clause([temp])中的一种方式,用于编写关于模板参数的临时约束,如...

19得票1回答
C++20概念:如何在`requires`子句中引用类名?

我有一个CRTP课程。 template <typename T> class Wrapper { // ... }; 这是打算被推导出来的。 class Type : Wrapper<Type> { // ... }; 我想通过对模板参数 T 设置...

16得票1回答
在嵌套模板中,`requires`表达式被评估为false,但代码仍然被编译。

我不明白在嵌套模板中如何使用requires关键字。 下面的代码可以在最新版本的MSVC和gcc上编译(分别使用/std:c++latest和-std=c++2a)。 在这种情况下,requires是否被简单地丢弃了?我不应该这样使用吗? #include <type_traits...

11得票1回答
一个requires子句的条件可以是隐式转换为bool类型的吗?

在下面的示例中,第二个f函数重载的requires表达式的类型是std::integral_constant<bool,true>,它可以隐式转换为bool。 #include <type_traits> struct S { static constexp...

11得票2回答
在模板类中,为非模板成员函数添加requires子句

我有一个简单的模板类A。如果满足一些要求,我想要启用一个函数。 解决方案1 - requires子句 我尝试的第一个解决方案如下: template <class T> class A { public: void a(void) requires (same_as&...

7得票1回答
非法定义引导构造函数(C++20)

g++乐意接受以下代码,而clang和msvc都无法匹配出线定义。 有任何想法为什么? template <bool B> struct test { test() requires (B); test() requires(!B); }; templa...