В соответствии с тем, что я вижу в источнике STL:
add_cv_t<T>
и const volatile T
- нет разницы
add_const_t<T>
и const T
- никакой разницы
add_volatile_t<T>
и volatile T
- нет разницы
add_lvalue_reference_t<T>
и T&
- существует разница, например, если T не является ссылочным типом void. add_lvalue_reference_t<void>::type = void
и void&
= ошибка времени компиляции
add_rvalue_reference_t<T>
и T&&
- то же, что и выше
add_pointer_t<T>
и T*
- разность, когда T потому что нет указателя на ссылку. add_pointer_t<T>
эквивалентно std::remove_reference<T>::type*