#include <iostream>
using namespace std;
#define FWD(a) std::forward<decltype(a)>(a)
void foo(int& a) { cout << "lref" << endl; }
void foo(const int& a) { cout << "cref" << endl; }
void foo(int&& a) { cout << "rref" << endl; }
template <typename T>
void call_foo(T&& t) { foo(FWD(t)); }
int main() {
int a = 10;
call_foo(10); // 3) prints cref
call_foo(a); // 4) prints cref
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBGV0QoYSkgc3RkOjpmb3J3YXJkPGRlY2x0eXBlKGEpPihhKQp2b2lkIGZvbyhpbnQmIGEpIHsgY291dCA8PCAibHJlZiIgPDwgZW5kbDsgfQp2b2lkIGZvbyhjb25zdCBpbnQmIGEpIHsgY291dCA8PCAiY3JlZiIgPDwgZW5kbDsgfQp2b2lkIGZvbyhpbnQmJiBhKSB7IGNvdXQgPDwgInJyZWYiIDw8IGVuZGw7IH0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIGNhbGxfZm9vKFQmJiB0KSB7IGZvbyhGV0QodCkpOyB9CgoKaW50IG1haW4oKSB7CglpbnQgYSA9IDEwOwoJY2FsbF9mb28oMTApOyAvLyAzKSBwcmludHMgY3JlZgogICAgY2FsbF9mb28oYSk7ICAvLyA0KSBwcmludHMgY3JlZgoJcmV0dXJuIDA7Cn0=