#include <iostream>
class foo
{
public:
foo(const int&) {std::cout << "const int &\n";}
template <typename T>
foo(T &&) {std::cout << "T &&\n"; static_assert( std::is_same<T&&, int&>::value, "" ); }
};
void bar(const int &) {std::cout << "const int &\n";}
template <typename T> void bar(T &&) {std::cout << "T &&\n";}
void foobar(const int &) {std::cout << "const int &\n";}
template <typename T> void foobar(T) {std::cout << "T\n";}
int main()
{
int i;
foo f(i);
bar(i);
foobar(i);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgZm9vCnsKcHVibGljOgogICAgZm9vKGNvbnN0IGludCYpIHtzdGQ6OmNvdXQgPDwgImNvbnN0IGludCAmXG4iO30KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgZm9vKFQgJiYpIHtzdGQ6OmNvdXQgPDwgIlQgJiZcbiI7IHN0YXRpY19hc3NlcnQoIHN0ZDo6aXNfc2FtZTxUJiYsIGludCY+Ojp2YWx1ZSwgIiIgKTsgfQp9OwogCnZvaWQgYmFyKGNvbnN0IGludCAmKSB7c3RkOjpjb3V0IDw8ICJjb25zdCBpbnQgJlxuIjt9CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIGJhcihUICYmKSB7c3RkOjpjb3V0IDw8ICJUICYmXG4iO30KIAp2b2lkIGZvb2Jhcihjb25zdCBpbnQgJikge3N0ZDo6Y291dCA8PCAiY29uc3QgaW50ICZcbiI7fQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBmb29iYXIoVCkge3N0ZDo6Y291dCA8PCAiVFxuIjt9CiAKaW50IG1haW4oKQp7CiAgICBpbnQgaTsKICAgIGZvbyBmKGkpOwogICAgYmFyKGkpOwogICAgZm9vYmFyKGkpOwp9