gpt4 book ai didi

c++ - 在嵌套需求中,为什么使用 `requires bool_constant::value;` 而不是 `requires X;` ?

转载 作者:行者123 更新时间:2023-12-01 13:33:58 26 4
gpt4 key购买 nike

我在看 this cppreference page ,并在其中找到以下代码:

template <class G>
concept uniform_random_bit_generator =
// ...
requires {
// ...
requires std::bool_constant<(G::min() < G::max())>::value;
};
我很好奇为什么 std::bool_constant在这里使用。是不是可以使用 requires G::min() < G::max();直接,像这样:
template <class G>
concept uniform_random_bit_generator =
// ...
requires {
// ...
requires G::min() < G::max();
};

最佳答案

因为 requires G::min() < G::max();如果 G::min() < G::max() 是硬错误不形成常量表达式,而是 requires std::bool_constant<(G::min() < G::max())>::value就是 false .
以这种类型和这些概念为例:

struct foo {
static int min();
static int max();
};

template<typename T>
concept min_max_1 = requires {
requires T::min() < T::max();
};

template<typename T>
concept min_max_2 = requires {
requires std::bool_constant<(T::min() < T::max())>::value;
};

// Which are entirely equivalent to
template<typename T>
concept min_max_1 = T::min() < T::max();

template<typename T>
concept min_max_2 = std::bool_constant<(T::min() < T::max())>::value;
static_assert(!min_max_2<foo>);按预期成功,因为它形成了一个无效的表达式,所以它是假的。 static_assert(!min_max_1<foo>);创建编译时错误,因为 T::min() < T::max()是一个有效的表达式,它只是不是 bool 常量表达式,这是预期的。

关于c++ - 在嵌套需求中,为什么使用 `requires bool_constant<X>::value;` 而不是 `requires X;` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63547982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com