#include <iostream>
using namespace std;
template<typename T>
void f(T&&) { cout << "f(T&&)" << endl; }
template<typename T>
void f(const T&&) { cout << "f(const T&&)" << endl; }
struct A {};
const A g1() { return {}; }
const int g2() { return {}; }
int main()
{
f(g1()); // outputs "f(const T&&)" as expected.
f(g2()); // outputs "f(T&&)" not as expected.
}
Описание проблемы встроено в код. Мой компилятор clang 5.0
.
Мне просто интересно:
Почему С++ обрабатывает встроенные типы и пользовательские типы по-разному в этом случае?