std:: is_implicit_lifetime
|
Определено в заголовочном файле
<type_traits>
|
||
|
template
<
class
T
>
struct is_implicit_lifetime ; |
(начиная с C++23) | |
std::is_implicit_lifetime
является
UnaryTypeTrait
.
Если
T
является
типом с неявным временем жизни
, предоставляет константу-член
value
равную
true
. Для любого другого типа,
value
равна
false
.
Поведение не определено, если T является неполным типом, отличным от типа массива или (возможно, cv-квалифицированного) void .
Если программа добавляет специализации для
std::is_implicit_lifetime
или
std::is_implicit_lifetime_v
, поведение не определено.
Содержание |
Параметры шаблона
| T | - | тип для проверки |
Шаблон вспомогательной переменной
|
template
<
class
T
>
constexpr bool is_implicit_lifetime_v = is_implicit_lifetime < T > :: value ; |
(начиная с C++23) | |
Унаследовано от std:: integral_constant
Константы-члены
|
value
[static]
|
true
если
T
является типом с неявным временем жизни,
false
в противном случае
(публичная статическая константа-член) |
Функции-члены
|
operator bool
|
преобразует объект в
bool
, возвращает
value
(публичная функция-член) |
|
operator()
(C++14)
|
возвращает
value
(публичная функция-член) |
Типы-члены
| Тип | Определение |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_is_implicit_lifetime
|
202302L
|
(C++23) |
std::is_implicit_lifetime
|
Пример
// Следующие типы в совокупности называются типами с неявным временем жизни: // * скалярные типы: // * арифметические типы // * типы перечислений // * типы указателей // * типы указателей на члены // * std::nullptr_t // * классы с неявным временем жизни // * является агрегатом, деструктор которого не предоставлен пользователем // * имеет по крайней мере один тривиальный подходящий конструктор и тривиальный, // неудалённый деструктор // * типы массивов // * cv-квалифицированные версии этих типов. #include <type_traits> static_assert(std::is_implicit_lifetime_v<int>); // арифметический тип является скалярным типом static_assert(std::is_implicit_lifetime_v<const int>); // cv-квалифицированный скалярный тип enum E { e }; static_assert(std::is_implicit_lifetime_v<E>); // тип перечисления является скалярным типом static_assert(std::is_implicit_lifetime_v<int*>); // тип указателя является скалярным типом static_assert(std::is_implicit_lifetime_v<std::nullptr_t>); // скалярный тип struct S { int x, y; }; // S является классом с неявным временем жизни: агрегат без пользовательского деструктора static_assert(std::is_implicit_lifetime_v<S>); static_assert(std::is_implicit_lifetime_v<int S::*>); // указатель на член struct X { ~X() = delete; }; // X не является классом с неявным временем жизни из-за удалённого деструктора static_assert(!std::is_implicit_lifetime_v<X>); static_assert(std::is_implicit_lifetime_v<int[8]>); // тип массива static_assert(std::is_implicit_lifetime_v<volatile int[8]>); // cv-квалифицированный тип массива int main() {}
Смотрите также
|
(C++11)
|
проверяет, является ли тип скалярным типом
(шаблон класса) |
|
(C++11)
|
проверяет, является ли тип массивом
(шаблон класса) |
|
(C++17)
|
проверяет, является ли тип агрегатным типом
(шаблон класса) |
|
неявно создает объекты в заданном хранилище с повторным использованием представления объекта
(шаблон функции) |