Просьба помочь разобраться с r-value и l-value значениями в шаблонах
Почему код №1 компилируется, а код №2 нет Код №1
#include <iostream>
using namespace std;
template<typename T> void my_swap(T&& first, T& second){T buf=second; second=first; first=buf; }
template<typename T> void my_swap(T& first, const int second){first=second; }
int main()
{
int a=1;
int b=2;
cout << a << " " << b << endl;
my_swap(a,b);
cout << a << " " << b << endl;
my_swap(a,10);
cout << a << " " << b << endl;
return 0;
}
Код №2
#include <iostream>
using namespace std;
template<typename T> void my_swap(T& first, T& second){T buf=second; second=first; first=buf; }
template<typename T> void my_swap(T& first, const int second){first=second; }
int main()
{
int a=1;
int b=2;
cout << a << " " << b << endl;
my_swap(a,b);
cout << a << " " << b << endl;
my_swap(a,10);
cout << a << " " << b << endl;
return 0;`введите сюда код`
}
С моей точки зрения правильно : T& first, T&& second