#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgcHVzaF9iYWNrKFQmJiBuZXd0KXsKICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSBUeXBlOwoKICBUeXBlKiBwdHI9KFR5cGUqKW9wZXJhdG9yIG5ldyhzaXplb2YoVHlwZSkpOyAvL21lbW9yeSBsZWFrIGJ1dCB3L2UKICBuZXcgKHB0cikgVHlwZShzdGQ6OmZvcndhcmQ8VD4obmV3dCkpOwp9CgppbnQgbWFpbigpewogIHN0cmluZyBkPSJoaSI7CiAgcHVzaF9iYWNrKGQpOyAvL3RoZSBwcm9ibGVtYXRpYyBsaW5lCiAgcHVzaF9iYWNrKHN0ZDo6bW92ZShkKSk7CgogIHJldHVybiAxOwp9Cg==