#include <iostream>
#include <string>
#include <utility>
#include <type_traits>

using namespace std;

template<typename T>
void push_back(T&& newt){
  typedef typename std::remove_reference<T>::type Type;

  Type* ptr=(Type*)operator new(sizeof(Type)); //memory leak but w/e
  new (ptr) Type(std::forward<T>(newt));
}

int main(){
  string d="hi";
  push_back(d); //the problematic line
  push_back(std::move(d));

  return 1;
}
