C++ named requirements: BooleanTestable - cppreference.com (original) (raw)

Specifies that an expression of such a type and value category is convertible to bool, and for which the logical operators for the type or two different BooleanTestable types have the usual behavior (including short-circuiting).

[edit] Requirements

Let e be an expression of a certain type and value category. The type and value category meet the BooleanTestable requirements if:

[edit] Notes

The standard does not define a named requirement with this name. It was originally proposed in an early resolution of LWG2114, but was superseded by the exposition-only concept _[boolean-testable](../concepts/boolean-testable.html "cpp/concepts/boolean-testable")_ in the final resolution P2167R3. Because implementations generally expect the provided types to model _boolean-testable_ even in pre-C++20 modes, we intentedly treat P2167R3 as a defect report and transform the _boolean-testable_ to legacy named requirements.

When the && and || operators are used with operands whose type and value category are BooleanTestable, built-in versions are selected and short-circuit evaluation is performed.

The type and value category of an expression e meet the BooleanTestable requirements if and only if decltype((e)) models boolean-testable. (since C++20)

Examples of BooleanTestable types (with any value category) include bool, std::true_type(since C++11), std::bitset<N>::reference, and int*.

[edit] Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 2114(P2167R3) C++98 convertibility to bool was too weak to reflect the expectation of implementations requirements strengthened

[edit] See also

| | specifies that a type can be used in Boolean contexts(exposition-only concept*)[edit] | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |