Пространства имён
Варианты
Действия

std::is_literal_type

Материал из cppreference.com
< cpp‎ | types
 
 
Библиотека метапрограммирования
Свойства типов
Категории типов
(C++11)
(C++14)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Свойства типов
(C++11)
(C++11)
(C++14)
(C++11)
is_literal_type
(C++11)(до C++20*)
(C++11)(устарело в C++20)
(C++11)
Константы свойств типа
Метафункции
(C++17)
Поддерживаемые операции
Запросы отношений и свойств
Модификации типов
(C++11)(C++11)(C++11)
Преобразования типов
(C++11)(устарело в C++23)
(C++11)(устарело в C++23)
(C++11)
(C++11)
(C++17)

(C++11)(до C++20*)(C++17)
Рациональная арифметика времени компиляции
Целочисленные последовательности времени компиляции
 
Определено в заголовочном файле <type_traits>
template< class T >
struct is_literal_type;
(начиная с C++11)
(устарело в C++17)
(удалено в C++20)

std::is_literal_type является UnaryTypeTrait.

(Это свойство типа устарело[1] и удалено[2] как предлагающее незначительную ценность обобщённому коду.)

Если T соответствует всем требованиям LiteralType, предоставляет константу-элемент value, равную true. Для любого другого типа value равна false.

Если std::remove_all_extents_t<T> является неполным типом и не (возможно, cv-квалифицированным) void, поведение не определено.

Поведение программы, добавляющей специализации для std::is_literal_type или std::is_literal_type_v (начиная с C++17) не определено.

Содержание

[править] Параметры шаблона

T тип для проверки

[править] Шаблон вспомогательной переменной

template< class T >
inline constexpr bool is_literal_type_v = is_literal_type<T>::value;
(начиная с C++17)
(устарело)
(удалено в C++20)

Унаследован от std::integral_constant

Константы элементы

value
[static]
true, если T является литеральным типом, false иначе
(public static константа-элемент)

Функции-элементы

operator bool
преобразует объект в bool, возвращает value
(public функция-элемент)
operator()
(C++14)
возвращает value
(public функция-элемент)

Типы элементы

Тип Определение
value_type bool
type std::integral_constant<bool, value>

[править] Примечание

Только литеральные типы могут использоваться в качестве параметров или возвращаться из no section name. Только литеральные классы могут иметь функции-элементы constexpr.

[править] Пример

#include <type_traits>
 
struct A { int m; };
static_assert(std::is_literal_type_v<A> == true);
 
struct B { virtual ~B(); };
static_assert(std::is_literal_type_v<B> == false);
 
int main() {}

[править] Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 2015 C++11 T может быть массивом неполного классового типа
с неизвестной границей
поведение в этом случае не определено

[править] Внешние ссылки

  1. Alisdair Meredith. "Устаревшее Свойство is_literal". Устаревание Рудиментарных Библиотечных Частей в C++17. "Свойство типа is_literal имеет незначительную ценность для обобщённого кода, поскольку действительно необходима возможность знать, что конкретная конструкция будет производить константную инициализацию."
  2. Alisdair Meredith, Stephan T. Lavavej, Tomasz Kamiński. "Устаревшие свойства типов". Обзор Устаревших Средств C++17 для C++20. "Строгая рекомендация: Удалите свойства, которые могут жить как зомби. [...] Обзор Торонто: Принять настоятельную рекомендацию, исключить из C++20."