c++ - C++ 20 概念/要求子句
问题描述
如果有人能解释 C++ 20+ 编译器(在我的例子中是 MSVC 2022)如何能够编译以下内容,我将非常感激,为什么简单的概念没有效果?
template <typename T>
concept Simple = requires(T t)
{
std::is_trivial_v<T> == true;
};
void foo(Simple auto s) {
std::cout << "bar";
}
int main(int argc, char** argv)
{
using Bytes = std::span<std::byte>;
Bytes b;
static_assert(false == std::is_trivial_v<Bytes>);
foo(b); //compiles and prints "bar"
}
解决方案
template <typename T>
concept Simple = requires(T t)
{
std::is_trivial_v<T> == true;
};
这将检查表达式std::is_trivial_v<T> == true
是否格式正确,忽略其值。
要检查表达式是否真实,请添加嵌套requires
:
template <typename T>
concept Simple = requires(T t)
{
requires std::is_trivial_v<T>/* == true*/;
};
或者只是把它放在外面requires
:
template <typename T>
concept Simple = std::is_trivial_v<T>;
推荐阅读
- php - php动态获取网页中特定单词的计数
- mongodb - java mongo驱动中mongo shell UUID()的等价物
- selenium - 如何使用java lang在selenium中找到具有href作为java脚本函数的链接
- javascript - 序列化表单数据并将它们添加到 jquery $.post
- jquery - Adding a column that is a result of two other columns in jqgrid?
- c# - 如何通过数据范围加载水晶报表
- c++ - 必须“询问对象的确切类型”是否总是表明设计不佳?
- c++ - dyld:惰性符号绑定失败
- localhost - 本地主机和 IIS 错误
- javascript - 为什么我的按钮在附加时重复?