Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(C++14) |
Defined in header <type_traits> | ||
template<class T> struct is_implicit_lifetime; | (since C++23) | |
std::is_implicit_lifetime
is aUnaryTypeTrait.
IfT
is animplicit-lifetime type, provides the member constantvalue equal totrue. For any other type,value isfalse.
The behavior is undefined ifT is an incomplete type other than an array type or (possibly cv-qualified)void.
If the program adds specializations forstd::is_implicit_lifetime
orstd::is_implicit_lifetime_v
, the behavior is undefined.
Contents |
T | - | a type to check |
template<class T> constexprbool is_implicit_lifetime_v= is_implicit_lifetime<T>::value; | (since C++23) | |
value [static] | true ifT is an implicit-lifetime type,false otherwise(public static member constant) |
operator bool | converts the object tobool, returnsvalue (public member function) |
operator() (C++14) | returnsvalue (public member function) |
Type | Definition |
value_type | bool |
type | std::integral_constant<bool, value> |
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_is_implicit_lifetime | 202302L | (C++23) | std::is_implicit_lifetime |
// The following types are collectively called implicit-lifetime types:// * scalar types:// * arithmetic types// * enumeration types// * pointer types// * pointer-to-member types// * std::nullptr_t// * implicit-lifetime class types// * is an aggregate whose destructor is not user-provided// * has at least one trivial eligible constructor and a trivial,// non-deleted destructor// * array types// * cv-qualified versions of these types.#include <type_traits> static_assert(std::is_implicit_lifetime_v<int>);// arithmetic type is a scalar typestatic_assert(std::is_implicit_lifetime_v<constint>);// cv-qualified a scalar type enum E{ e};static_assert(std::is_implicit_lifetime_v<E>);// enumeration type is a scalar typestatic_assert(std::is_implicit_lifetime_v<int*>);// pointer type is a scalar typestatic_assert(std::is_implicit_lifetime_v<std::nullptr_t>);// scalar type struct S{int x, y;};// S is an implicit-lifetime class: an aggregate without user-provided destructorstatic_assert(std::is_implicit_lifetime_v<S>); static_assert(std::is_implicit_lifetime_v<int S::*>);// pointer-to-member struct X{ ~X()= delete;};// X is not implicit-lifetime class due to deleted destructorstatic_assert(!std::is_implicit_lifetime_v<X>); static_assert(std::is_implicit_lifetime_v<int[8]>);// array typestatic_assert(std::is_implicit_lifetime_v<volatileint[8]>);// cv-qualified array type int main(){}
(C++11) | checks if a type is a scalar type (class template)[edit] |
(C++11) | checks if a type is an array type (class template)[edit] |
(C++17) | checks if a type is an aggregate type (class template)[edit] |
implicitly creates objects in given storage with the object representation reused (function template)[edit] |