Возможно ли когда-нибудь для этого кода напечатать "ни"?
Да. В соответствии с правилом удержания типа для ссылки для пересылки , при передаче lvalue, T
будет выводиться как тип ссылки-lvalue, при передаче rvalue, T
будет выводиться как не тип ссылки. например,
int i;
foo(i); // T is deduced as int&
foo(0); // T is deduced as int
ЖИТЬ
С другой стороны, "rv"
не будет напечатан, если явно не указан аргумент шаблона.
С другой стороны (опять же), если вы проверите тип параметра функции t
, это будет либо тип lvalue-reference, либо тип rvalue-reference; "neither"
не будет напечатан.
int i;
foo(i); // T is deduced as int&, the type of t is int& (int& && -> int&)
foo(0); // T is deduced as int, the type of t is int&&
foo<int&&>(0); // T is specified as int&&, the type of t is int&& (int&& && -> int&&)
ЖИТЬ