#include <iostream>
#include <utility>
#include <type_traits>
class value
{
public:
value() {}
value(value const&)
{
std::cout << "value(copy constructor)\n";
}
value(value&&)
{
std::cout << "value(move constructor)\n";
}
};
template <typename T>
void push_back(T&& a_t)
{
new typename std::remove_reference<T>::type(std::forward<T>(a_t));
}
int main()
{
push_back(value());
value v;
push_back(v);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKY2xhc3MgdmFsdWUKewpwdWJsaWM6CiAgICB2YWx1ZSgpIHt9CiAgICB2YWx1ZSh2YWx1ZSBjb25zdCYpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJ2YWx1ZShjb3B5IGNvbnN0cnVjdG9yKVxuIjsKICAgIH0KICAgIHZhbHVlKHZhbHVlJiYpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJ2YWx1ZShtb3ZlIGNvbnN0cnVjdG9yKVxuIjsKICAgIH0KfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIHB1c2hfYmFjayhUJiYgYV90KQp7CiAgICBuZXcgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlKHN0ZDo6Zm9yd2FyZDxUPihhX3QpKTsKfQoKaW50IG1haW4oKQp7CiAgICBwdXNoX2JhY2sodmFsdWUoKSk7CiAgICB2YWx1ZSB2OwogICAgcHVzaF9iYWNrKHYpOwogICAgcmV0dXJuIDA7Cn0K