template<typename Class, typename... Args>
Class Create (Args&&... args)
{
return Class(args...); // RVO takes place here
}
struct A { A(int, int) {} };
struct B {};
int main ()
{
A a = Create<A>(1,2);
B b = Create<B>();
}
dGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3MsIHR5cGVuYW1lLi4uIEFyZ3M+CkNsYXNzIENyZWF0ZSAoQXJncyYmLi4uIGFyZ3MpCnsKICByZXR1cm4gQ2xhc3MoYXJncy4uLik7ICAvLyBSVk8gdGFrZXMgcGxhY2UgaGVyZQp9CgpzdHJ1Y3QgQSB7IEEoaW50LCBpbnQpIHt9IH07CnN0cnVjdCBCIHt9OyAKCmludCBtYWluICgpCnsKICBBIGEgPSBDcmVhdGU8QT4oMSwyKTsKICBCIGIgPSBDcmVhdGU8Qj4oKTsKfQo=