Просьба помочь разобраться с 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


Ответы (0 шт):