命名空间
变体
操作

布尔可测试

来自 cppreference.com
< cpp‎ | 概念
template< class B >
concept __boolean_testable_impl = std::convertible_to<B, bool>;
(1) (自 C++20 起)
(仅供说明*)
template< class B >

concept boolean-testable =
    __boolean_testable_impl<B> &&
    requires (B&& b) {
        { !std::forward<B>(b) } -> __boolean_testable_impl;

    };
(2) (自 C++20 起)
(仅供说明*)

仅供说明的概念 boolean-testable 指定了可转换为 bool 且逻辑运算符具有正常行为(包括 短路求值)的表达式的要求,即使对于两种不同的 boolean-testable 类型也是如此。

正式来说,为了模拟仅供说明的概念 __boolean_testable_impl,该类型不得定义任何成员 operator&&operator||,并且在通过 依赖于参数的查找 时,不可见任何可行的非成员 operator&&operator||。此外,给定一个表达式 e,使得 decltype((e))Bboolean-testable 仅在 bool(e) == !bool(!e) 时建模。

[编辑] 相等性保留

在标准库概念的 requires 表达式 中声明的表达式需要 保留相等性(除非另有说明)。

[编辑] 注释

boolean-testable 类型的示例包括 boolstd::true_typestd::bitset<N>::referenceint*.

[编辑] 参考文献

  • C++23 标准 (ISO/IEC 14882:2024)
  • 18.5.2 布尔可测试性 [concept.booleantestable]
  • C++20 标准 (ISO/IEC 14882:2020)
  • 18.5.2 布尔可测试性 [concept.booleantestable]