Annex D (normative) Compatibility features [depr]

D.12 Deprecated type traits [depr.meta.types]

В шапке есть следующее дополнение:<type_­traits>

namespace std {
  template <class T> struct is_literal_type;

  template <class T> constexpr bool is_literal_type_v = is_literal_type<T>::value;

  template <class> struct result_of; // not defined
  template <class Fn, class... ArgTypes> struct result_of<Fn(ArgTypes...)>;

  template <class T> using result_of_t = typename result_of<T>::type;
}

Requires: Для is_­literal_­type, remove_­all_­extents_­t<T> должен быть полный тип или cv void. For result_­of<Fn(ArgTypes...)>, Fn и все типы в пакете параметров ArgTypes должны быть полными типами cv voidили массивами с неизвестной границей.

is_­literal_­type<T> является a UnaryTypeTrait ([meta.rqmts]) с базовой характеристикой true_­type if T is a literal type, и в false_­type противном случае. Частичная специализация result_­of<Fn(ArgTypes...)> - это TransformationTrait тип, член type которого определен тогда и только тогда, когда invoke_­result<Fn, ArgTypes...>​::​type он определен. Если type определен, он называет тот же тип, что и invoke_­result_­t<Fn, ArgTypes...>.

Поведение программы, которая добавляет специализации is_­literal_­type или is_­literal_­type_­v не определено.