Annex D (normative) Compatibility features [depr]

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

The header <type_­traits> has the following addition:

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: For is_­literal_­type, remove_­all_­extents_­t<T> shall be a complete type or cv void. For result_­of<Fn(ArgTypes...)>, Fn and all types in the parameter pack ArgTypes shall be complete types, cv void, or arrays of unknown bound.

is_­literal_­type<T> is a UnaryTypeTrait ([meta.rqmts]) with a base characteristic of true_­type if T is a literal type, and false_­type otherwise. The partial specialization result_­of<Fn(ArgTypes...)> is a TransformationTrait whose member typedef type is defined if and only if invoke_­result<Fn, ArgTypes...>​::​type is defined. If type is defined, it names the same type as invoke_­result_­t<Fn, ArgTypes...>.

The behavior of a program that adds specializations for is_­literal_­type or is_­literal_­type_­v is undefined.