- #include <iostream> 
- using namespace std; 
-   
- template<class T, class... Args> 
- T* make_ptr( Args... args ) 
- { 
- 	return new T( args... ); 
- } 
-   
- template<class T, class... Args> 
- T* make_ptr_fwd( Args... args ) 
- { 
- 	return new T( forward<Args>( args )... ); 
- } 
-   
- struct Val {}; 
-   
- struct C { 
- 	C( const Val& v ) { cout << "C( const Val& )" << endl; } 
- 	C( Val&& ) { cout << "C( Val&& )" << endl; } 
- }; 
-   
- int main() { 
- 	cout << ">>> make_ptr:" << endl; 
- 	C* c1 = make_ptr<C>( Val() ); 
-   
- 	cout << ">>> make_ptr_fwd:" << endl; 
- 	C* c2 = make_ptr_fwd<C>( Val() ); 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MuLi4gQXJncz4KVCogbWFrZV9wdHIoIEFyZ3MuLi4gYXJncyApCnsKCXJldHVybiBuZXcgVCggYXJncy4uLiApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcy4uLiBBcmdzPgpUKiBtYWtlX3B0cl9md2QoIEFyZ3MuLi4gYXJncyApCnsKCXJldHVybiBuZXcgVCggZm9yd2FyZDxBcmdzPiggYXJncyApLi4uICk7Cn0KCnN0cnVjdCBWYWwge307CgpzdHJ1Y3QgQyB7CglDKCBjb25zdCBWYWwmIHYgKSB7IGNvdXQgPDwgIkMoIGNvbnN0IFZhbCYgKSIgPDwgZW5kbDsgfQoJQyggVmFsJiYgKSB7IGNvdXQgPDwgIkMoIFZhbCYmICkiIDw8IGVuZGw7IH0KfTsKCmludCBtYWluKCkgewoJY291dCA8PCAiPj4+IG1ha2VfcHRyOiIgPDwgZW5kbDsKCUMqIGMxID0gbWFrZV9wdHI8Qz4oIFZhbCgpICk7CgkKCWNvdXQgPDwgIj4+PiBtYWtlX3B0cl9md2Q6IiA8PCBlbmRsOwoJQyogYzIgPSBtYWtlX3B0cl9md2Q8Qz4oIFZhbCgpICk7Cn0=