fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template<class T, class... Args>
  5. T* make_ptr( Args... args )
  6. {
  7. return new T( args... );
  8. }
  9.  
  10. template<class T, class... Args>
  11. T* make_ptr_fwd( Args... args )
  12. {
  13. return new T( forward<Args>( args )... );
  14. }
  15.  
  16. struct Val {};
  17.  
  18. struct C {
  19. C( const Val& v ) { cout << "C( const Val& )" << endl; }
  20. C( Val&& ) { cout << "C( Val&& )" << endl; }
  21. };
  22.  
  23. int main() {
  24. cout << ">>> make_ptr:" << endl;
  25. C* c1 = make_ptr<C>( Val() );
  26.  
  27. cout << ">>> make_ptr_fwd:" << endl;
  28. C* c2 = make_ptr_fwd<C>( Val() );
  29. }
Success #stdin #stdout 0s 4208KB
stdin
Standard input is empty
stdout
>>> make_ptr:
C( const Val& )
>>> make_ptr_fwd:
C( Val&& )