fork download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. template<typename X, typename T>
  5. void extend_exception( X& ex, T&& value )
  6. {ex << value << std::endl;}
  7.  
  8. template<typename X>
  9. void extend_exception( X& ex, const std::string& value )
  10. {ex << "STRING: " << value << std::endl;}
  11.  
  12. template<typename X>
  13. void extend_exception(X& ex, std::string& value )
  14. {const std::string& v=value;extend_exception(ex, v);}
  15.  
  16. template<typename X>
  17. void extend_exception(X& ex, std::string&& value )
  18. {const std::string& v=value;extend_exception(ex, v);}
  19.  
  20. template<typename X, typename T0, typename T1, typename ... TR>
  21. void extend_exception( X& ex, T0&& p0, T1&& p1, TR&& ... rest )
  22. {
  23. extend_exception( ex, std::forward<T0>(p0) );
  24. extend_exception( ex, std::forward<T1>(p1), std::forward<TR>(rest)... );
  25. }
  26.  
  27. int main()
  28. {
  29. extend_exception( std::cout, std::string( "Happy" ) );
  30. std::string var( "var" );
  31. extend_exception( std::cout, var );
  32. extend_exception( std::cout, var, std::string( "Combo" ), const_cast<std::string const&>(var));
  33. return 0;
  34. }
Success #stdin #stdout 0s 3060KB
stdin
Standard input is empty
stdout
STRING: Happy
STRING: var
STRING: var
STRING: Combo
STRING: var