Provide a compile-time conditional type selector.
More...
Detailed Description
- Outline
-
-
- Purpose:
- Provide a compile-time conditional type selector.
-
- Classes:
-
- See also:
- Component bslmf_enableif
-
- Description:
- This component defines a meta-function,
bsl::conditional
, that may be used to conditionally select one of its two (template parameter) types based on a bool
(template parameter) value.
bsl::conditional
meets the requirements of the conditional
template defined in the C++11 standard [meta.trans.other], providing a typedef
type
that is an alias to the first (template parameter) type if the (template parameter) value is true
; otherwise, type
is an alias to the second (template parameter) type.
-
- Usage:
- In this section we show intended use of this component.
-
- Example 1: Conditionally Select From Two Types:
- Suppose that we want to select between two types based on a
bool
value.
- Now, we use
bsl::conditional
to select between two types, int
and char
, with a bool
value. When the bool
is true
, we select int
; otherwise, we select char
. We verify that our code behaves correctly by asserting the result of the bsl::conditional
with the expected type using bsl::is_same
: Finally, if the current compiler supports alias templates C++11 feature, we select between two types using bsl::conditional_t
and verify that our code behaves correctly by asserting the result of the bsl::conditional_t
with the expected type using bsl::is_same
: #ifdef BSLS_COMPILERFEATURES_SUPPORT_ALIAS_TEMPLATES
assert(true ==
(bsl::is_same<bsl::conditional_t<true, int, char>, int >::value));
assert(true ==
(bsl::is_same<bsl::conditional_t<false, int, char>, char>::value));
#endif
Note, that the bsl::conditional_t
avoids the ::type
suffix and typename
prefix when we want to use the result of the bsl::conditional
meta-function in templates.