#include <iostream>
#include <type_traits>
template<typename T>
typename std::enable_if<
std::is_const<typename std::remove_reference<T>::type>::value
>::type
forwarder(T&& x)
{
auto value_cat = std::is_rvalue_reference<decltype(x)>::value ? "r" : "l";
std::cout << value_cat << "value reference to const\n";
}
int main()
{
const int x = 42;
forwarder(std::move(x));
forwarder(x);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKICAgIHN0ZDo6aXNfY29uc3Q8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlPjo6dmFsdWUKPjo6dHlwZQpmb3J3YXJkZXIoVCYmIHgpCnsKCWF1dG8gdmFsdWVfY2F0ID0gc3RkOjppc19ydmFsdWVfcmVmZXJlbmNlPGRlY2x0eXBlKHgpPjo6dmFsdWUgPyAiciIgOiAibCI7CiAgICBzdGQ6OmNvdXQgPDwgdmFsdWVfY2F0IDw8ICJ2YWx1ZSByZWZlcmVuY2UgdG8gY29uc3RcbiI7Cn0KCmludCBtYWluKCkKewogICAgY29uc3QgaW50IHggPSA0MjsKICAgIGZvcndhcmRlcihzdGQ6Om1vdmUoeCkpOwogICAgZm9yd2FyZGVyKHgpOwp9