Исках да знам как е възможно това?
template<typename T>
void Test(T&& arg)
{
arg = 14;
}
int a = 23;
Test(a);
Въпросът ми е, че функцията Test изисква аргумент от тип Rvalue, но изглежда, че приема и параметър от тип lvalue. Защо така ? Дали това се дължи на наличието на шаблони? Защото, ако направя нещо подобно
void AnotherTest(int&& arg)
{
arg = 14;
}
Тогава функцията изисква параметърът да е от тип Rvalue. Ще съм благодарен, ако някой може да обясни защо наличието на шаблони променя поведението.
T&&
не е rvalue-reference (докатоint&&
е). Тя ще бъде изведена до rvalue- или lvalue-reference, в зависимост от категорията на стойността на аргументния израз. Скот Майерс го нарича универсална справка. - person jrok   schedule 12.05.2014