#include <iostream>
template <typename T>
void func_impl(T&) {std::cout << "lvalue\n";}
template <typename T>
void func_impl(const T&) {std::cout << "const lvalue\n";}
template <typename T>
void func_impl(T&&) {std::cout << "rvalue\n";}
template <typename T>
void func_impl(const T&&) {std::cout << "const rvalue\n";}
template <typename T>
void func(T &&t)
{
func_impl(std::forward<T>(t));
}
int main()
{
int lvalue = 0;
const int clvalue = 0;
func(lvalue);
func(clvalue);
func(4);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgZnVuY19pbXBsKFQmKSB7c3RkOjpjb3V0IDw8ICJsdmFsdWVcbiI7fQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgZnVuY19pbXBsKGNvbnN0IFQmKSB7c3RkOjpjb3V0IDw8ICJjb25zdCBsdmFsdWVcbiI7fQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgZnVuY19pbXBsKFQmJikge3N0ZDo6Y291dCA8PCAicnZhbHVlXG4iO30KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIGZ1bmNfaW1wbChjb25zdCBUJiYpIHtzdGQ6OmNvdXQgPDwgImNvbnN0IHJ2YWx1ZVxuIjt9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kdm9pZCBmdW5jKFQgJiZ0KQp7CglmdW5jX2ltcGwoc3RkOjpmb3J3YXJkPFQ+KHQpKTsKfQoKaW50IG1haW4oKQp7CglpbnQgbHZhbHVlID0gMDsKCWNvbnN0IGludCBjbHZhbHVlID0gMDsKCWZ1bmMobHZhbHVlKTsKCWZ1bmMoY2x2YWx1ZSk7CglmdW5jKDQpOwp9