BDE 4.14.0 Production release
|
Macros | |
#define | bslmf_IsSame bslmf::IsSame |
This alias is defined for backward compatibility. | |
Provide a meta-function for testing if two types are the same.
This component defines two meta-functions, bsl::is_same
and BloombergLP::bslmf::IsSame
and a template variable bsl::is_same_v
, that represents the result value of the bsl::is_same
meta-function. All these meta-functions may be used to query whether two types are the same. Two types are the same if they name the same type having the same cv-qualifications.
bsl::is_same
meets the requirements of the is_same
template defined in the C++11 standard [meta.rel], while bslmf::IsSame
was devised before is_same
was standardized.
The two meta-functions are functionally equivalent. The major difference between them is that the result for bsl::is_same
is indicated by the class member value
, while the result for bslmf::IsSame
is indicated by the class member value
.
Note that bsl::is_same
should be preferred over bslmf::IsSame
, and in general, should be used by new components.
Also note that the template variable is_same_v
is defined in the C++17 standard as an inline variable. If the current compiler supports the inline variable C++17 compiler feature, bsl::is_same_v
is defined as an inline constexpr bool
variable. Otherwise, if the compiler supports the variable templates C++14 compiler feature, bsl::is_same_v
is defined as a non-inline constexpr bool
variable. See BSLS_COMPILERFEATURES_SUPPORT_INLINE_VARIABLES
and BSLS_COMPILERFEATURES_SUPPORT_VARIABLE_TEMPLATES
macros in bsls_compilerfeatures component for details.
In this section we show intended use of this component.
Suppose that we have several pairs of types and want to assert whether the types in each pair are the same.
First, we define several typedef
s:
Now, we instantiate the bsl::is_same
template for certain pairs of the typedef
s and assert the value
static data member of each instantiation:
Note that a const
-qualified type is considered distinct from the non-const
(but otherwise identical) type:
Similarly, a t_TYPE
and a reference to t_TYPE
(t_TYPE&
) are distinct:
Note that if the current compiler supports the variable templates C++14 feature then we can re-write the snippet of code above using the bsl::is_same_v
variable as follows:
#define bslmf_IsSame bslmf::IsSame |