Spec-Zone.ru › C++

std::is_literal_type

Определено в заголовке <type_traits>
template< class T >
struct is_literal_type;
(с C++11)
(устаревшее в C++17)
(удалено в C++20)

Это UnaryTypeTrait.

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

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

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

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

Параметры шаблона

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 в противном случае
(публичная статическая константа-член)

Члены-функции

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

Типы-члены

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

Примечания

Только литеральные типы могут использоваться как параметры или возвращаемые значения constexpr функций. Только литеральные классы могут иметь 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++.

DR Применено к Поведение, как опубликовано Корректное поведение
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."

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

Spec-Zone.ru

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