25得票1回答
`equality_comparable_with`需要要求`common_reference`吗?

概念equality_­comparable_with旨在声明类型为T和U的对象可以相互比较相等,并且如果它们相等,则具有预期的含义。这很好。 然而,该概念还要求存在common_reference_t<T&, U&>。 common_reference及其相关功...

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

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

24得票3回答
如何使用自定义错误信息使概念失败(C++20)

概念在确定错误代码行的位置方面非常出色,可以指出哪个约束条件未满足。 然而,我想知道是否可能在那里发布自定义信息性消息。静态断言的优点正是这种可能性。用例:任何想要帮助用户找出为什么某个表达式不满足约束条件的库。 这里有一个简单的例子,只是为了有一些代码。您可能会认为任何半好的“用户”都必...

24得票1回答
为什么概念细化不能使用简洁的语法?

在细化概念时,标准中一贯的做法是完全书写被细化的概念。例如,在[concepts.integral]中,SignedIntegral像这样细化了Integral: template<class T> concept Integral = is_integral_v<T&...

24得票2回答
简单概念检查

假设我有一个简单的模板如下: template<typename T> class A {}; 我想要明确指出类型参数T是某个无关联的类型X<U>,其中U是未知的(或不能指定的)。 有没有一种方式将其表达为一个概念?

23得票2回答
为什么类型约束`std::convertible_to`只能用一个模板参数?

我已经在the standard和cppreference上滚动和搜索了几个小时,但仍然找不到答案,如果有人能为我解释一下这种情况,我将不胜感激: 我正在研究标准概念std::convertibe_to。这里是一个我理解的简单示例。 class A {}; class B : public...

23得票2回答
如何使用 C++20 的要求/概念来限制折叠表达式?

如何使用C++20概念(concepts)来限制可变参数模板(variadic templates)和折叠表达式(fold expression)中允许的类型? 例如,假设我想将以下折叠表达式限制为仅支持整数类型,我该如何做?#include <string> #include &...

23得票3回答
仅包含布尔字面值的概念是否不合规,无需诊断?

我在一个和任何模板完全无关的场景中,尝试使用C++概念和函数重载,并偶然发现了这个:struct S { int mult(int x) requires (true) { return x; } int mult(int x) requires (false) { retu...

22得票2回答
为什么在概念中要使用std::forward?

我在阅读有关约束的cppreference页面时,注意到了以下例子: // example constraint from the standard library (ranges TS) template <class T, class U = T> concept bool ...

22得票1回答
概念是什么?

我在/。上听说C++0x不再有"概念"(concepts)了,但我不知道"概念"是什么?有人能解释一下吗?