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

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

24得票3回答
在requires表达式中使用using声明的方法是否存在?

我想测试一下是否可以将某种类型传递给某个函数,但我想在函数查找中使用ADL,并包含来自特定命名空间的函数。 考虑以下代码: #include <utility> #include <vector> template<class T> concept S...

18得票3回答
如果constexpr和requires-expression用于临时概念检查

假设我们使用C++17的if constexpr和Concepts TS(例如,在最新的gcc版本中),我们想要检查模板函数中的类型是否有嵌套类型。 #include <iostream> struct Foo { using Bar = int; }; template&l...

12得票1回答
为什么C++20的requires表达式不按预期工作?

#include <type_traits> template<typename T> struct IsComplete final : std::bool_constant<requires{sizeof(T);}> {}; int main...

11得票1回答
允许使用闭包来“捕获”外部作用域的变量吗?

在下面的示例中,函数参数被用于通过requires表达式测试使用它们的表达式是否格式正确。requires表达式不接受任何参数;它直接使用函数作用域中的变量。 #include <cstddef> #include <vector> template<type...

10得票1回答
在requires表达式中,是否允许为返回类型要求指定类型?

看看这个简单的概念示例: template <typename T> requires requires(T t) { { t+t } -> bool; } void fn() { } int main() { fn<bool>(); } 在这里,...

8得票1回答
如何在requires表达式中重用函数调用的返回类型?

我正在编写一个概念,用于检查一个类型是否可以在组合两个函数的表达式中使用。 template<typename T> concept C = requires(T t) { f(g(t)); }; 我想检查对于给定类型为T的对象t,是否可以调用g(t),然后将返回的值...

7得票1回答
C++20奇怪的返回值要求表达式

考虑requires表达式: constexpr auto b = requires { []{}; }; GCC pass了以下两个static_assert: static_assert(b); static_assert(!b); 这看起来非常奇怪。我期望b的值应该是t...