C++ 20 Concepts/Requires 个子句
C++ 20 Concepts/Requires clauses
如果有人能解释 C++ 20+ 编译器(在我的例子中是 MSVC 2022)如何编译以下内容,我将不胜感激,为什么 Simple 概念没有效果?
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>;
如果有人能解释 C++ 20+ 编译器(在我的例子中是 MSVC 2022)如何编译以下内容,我将不胜感激,为什么 Simple 概念没有效果?
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>;