23 General utilities library [utilities]

23.15 Metaprogramming and type traits [meta]

23.15.7 Transformations between types [meta.trans]

23.15.7.1 Const-volatile modifications [meta.trans.cv]

Таблица 45 - Постоянно изменчивые модификации
ШаблонКомментарии
template <class T>
struct remove_­const;
Элемент typedef именует type тот же тип, T за исключением того, что любой константный квалификатор верхнего уровня был удален. [ Example: remove_­const_­t<const volatile int> оценивается volatile intкак, тогда как remove_­const_­t<const int*> оценивается как const int*. ] end example
template <class T>
struct remove_­volatile;
Элемент typedef именует type тот же тип, T за исключением того, что все квалификаторы volatile верхнего уровня были удалены. [ Example: remove_­volatile_­t<const volatile int> оценивается const intкак, тогда как remove_­volatile_­t<volatile int*> оценивается как volatile int*. ] end example
template <class T>
struct remove_­cv;
Элемент typedef type должен быть таким же, как T за исключением того, что любой квалификатор cv верхнего уровня был удален. [ Example: remove_­cv_­t<const volatile int> оценивается intкак, тогда как remove_­cv_­t<const volatile int*> оценивается как const volatile int*. ] end example
template <class T>
struct add_­const;
Если T это ссылка, функция или тип верхнего уровня с указанием const, тогда type именуется тот же тип, что и T, в противном случае T const.
template <class T>
struct add_­volatile;
Если T является ссылкой, функцией или типом верхнего уровня, квалифицированным с указанием изменчивости, тогда type именуется тот же тип, что и T, в противном случае T volatile.
template <class T>
struct add_­cv;
Элемент typedef type называет тот же тип, что и add_­const_­t<add_­volatile_­t<T>>.