В большинстве случаев std::add_rvalue_reference_t
эквивалентно T&&
. Тем не менее, правила свертывания ссылок и the-rules-that-dictate-which-types-are-referenceable могут иметь ваш код, если он не учитывается.
, в некоторых случаях, когда тип статического члена type
будет отличаться, поскольку T
является не ссылочным типом. Например, std::add_rvalue_reference_t
разрешает void
и (используя другой шаблон, который вы упомянули в качестве примера) std::add_pointer_t
разрешает T*
(если вы хотите вызвать хаос, требуемый ритуал std::add_pointer_t
:))
Уважая использование, его можно использовать в качестве параметра шаблона шаблона, чтобы сделать какую-то чертову черную магию. Во всяком случае, такие вещи, как std::is_rvalue_reference_t
или std::remove_reference_t
, обычно чаще используются при манипулировании ссылочными атрибутами типа.