В шапке есть следующее дополнение:<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...>.