#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;
}
