Spec-Zone.ru › C++

std::is_destructible, std::is_trivially_destructible, std::is_nothrow_destructible

Определено в заголовке <type_traits>
template< class T >
struct is_destructible;
(1) (с C++11)
template< class T >
struct is_trivially_destructible;
(2) (с C++11)
template< class T >
struct is_nothrow_destructible;
(3) (с C++11)
1) Если T является типом-ссылкой, предоставляет старое членское константное значение value равное true.
Если T является (возможно, квалифицированным cv) типом void, типом функции или массивом неизвестной размерности, то value равно false.
Если T является типом объекта, тогда для типа U являющимся std::remove_all_extents<T>::type, если выражение std::declval<U&>().~U() корректно в контексте неоценивания, то value равно true. В противном случае, value равно false.
2) То же, что и (1), и дополнительно std::remove_all_extents<T>::type является либо типом, не являющимся классом, либо типом класса с тривиальным деструктором.
3) То же, что и (1), но деструктор является noexcept.

T должен быть полным типом, (возможно, cv-квалифицированным) void или массивом неизвестной размерности. В противном случае поведение не определено.

Если экземпляр шаблона выше зависит непосредственно или косвенно от неполного типа, и этот экземпляр мог бы дать другой результат, если бы этот тип был гипотетически завершен, поведение не определено.

Поведение программы, добавляющей специализации для любого из шаблонов, описанных на этой странице, не определено.

Вспомогательные шаблоны переменных

template< class T >
inline constexpr bool is_destructible_v = is_destructible<T>::value;
(с C++17)
template< class T >
inline constexpr bool is_trivially_destructible_v = is_trivially_destructible<T>::value;
(с C++17)
template< class T >
inline constexpr bool is_nothrow_destructible_v = is_nothrow_destructible<T>::value;
(с C++17)

Наследуется от 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>

Примечания

Поскольку программа C++ завершается, если деструктор выбрасывает исключение во время разбора стека (что обычно нельзя предсказать), все практические деструкторы не выбрасывают исключения, даже если они не объявлены noexcept. Все деструкторы, используемые в стандартной библиотеке C++, не выбрасывают исключения.

Память, занимаемая тривиально разрушаемыми объектами может быть повторно использована без вызова деструктора.

Пример

#include <iostream>
#include <string>
#include <type_traits>
 
struct Foo
{
    std::string str;
    ~Foo() noexcept {};
};
 
struct Bar
{
    ~Bar() = default;
};
 
int main()
{
    std::cout << std::boolalpha
              << "std::string is destructible? "
              << std::is_destructible<std::string>::value << '\n'
              << "Foo is trivially destructible? "
              << std::is_trivially_destructible_v<Foo> << '\n'
              << "Foo is nothrow destructible? "
              << std::is_nothrow_destructible<Foo>() << '\n'
              << "Bar is trivially destructible? "
              << std::is_trivially_destructible<Bar>{} << '\n';
}

Вывод:

std::string is destructible? true
Foo is trivially destructible? false
Foo is nothrow destructible? true
Bar is trivially destructible? true

Отчеты об ошибках

Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применено к Поведение как опубликовано Правильное поведение
LWG 2049 C++11 Спецификация была неполной из-за воображаемого оборачивающего структуры сделана полной

См. также

is_constructibleis_trivially_constructibleis_nothrow_constructible
(C++11)(C++11)(C++11)
проверяет, есть ли у типа конструктор для определенных аргументов
(шаблон класса)
has_virtual_destructor
(C++11)
проверяет, есть ли у типа виртуальный деструктор
(шаблон класса)
destructible
(C++20)
определяет, что объект типа может быть уничтожен
(концепция)
деструктор освобождает заявленные ресурсы

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/is_destructible

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API