C++20约束的一个要点是,在某些情况下,你必须写requires requires。例如,来自[expr.prim.req]/3的这个示例: 一个requires-expression也可以作为requires-clause([temp])中的一种方式,用于编写关于模板参数的临时约束,如...
我想测试一下是否可以将某种类型传递给某个函数,但我想在函数查找中使用ADL,并包含来自特定命名空间的函数。 考虑以下代码: #include <utility> #include <vector> template<class T> concept S...
假设我们使用C++17的if constexpr和Concepts TS(例如,在最新的gcc版本中),我们想要检查模板函数中的类型是否有嵌套类型。 #include <iostream> struct Foo { using Bar = int; }; template&l...
#include <type_traits> template<typename T> struct IsComplete final : std::bool_constant<requires{sizeof(T);}> {}; int main...
在下面的示例中,函数参数被用于通过requires表达式测试使用它们的表达式是否格式正确。requires表达式不接受任何参数;它直接使用函数作用域中的变量。 #include <cstddef> #include <vector> template<type...
看看这个简单的概念示例: template <typename T> requires requires(T t) { { t+t } -> bool; } void fn() { } int main() { fn<bool>(); } 在这里,...
我正在编写一个概念,用于检查一个类型是否可以在组合两个函数的表达式中使用。 template<typename T> concept C = requires(T t) { f(g(t)); }; 我想检查对于给定类型为T的对象t,是否可以调用g(t),然后将返回的值...
考虑requires表达式: constexpr auto b = requires { []{}; }; GCC pass了以下两个static_assert: static_assert(b); static_assert(!b); 这看起来非常奇怪。我期望b的值应该是t...