fork download
  1. #include <iostream>
  2. #include <utility>
  3.  
  4. struct String {
  5. String(){
  6. std::cout << " String default ctor\n";
  7. };
  8. String(const String& s) {
  9. std::cout << " String copy\n";
  10. }
  11. String(String&& s) {
  12. std::cout << " String move\n";
  13. }
  14. ~String() {
  15. std::cout << " String dtor\n";
  16. }
  17. };
  18.  
  19. struct Texture_MrShoor {
  20. String m_name;
  21. Texture_MrShoor(String name) : m_name(std::move(name)) {};
  22. };
  23.  
  24. struct Texture_ALX {
  25. String m_name;
  26. template<class T>
  27. Texture_ALX(T && name) : m_name(std::forward<T>(name)) {};
  28. };
  29.  
  30. String GetFullPath() {
  31. return String();
  32. }
  33.  
  34. template <typename T>
  35. T LoadTexture( const String &some ) {
  36. return T( some );
  37. }
  38.  
  39. int main()
  40. {
  41. {
  42. std::cout << "LoadTexture (MrShoor case)\n";
  43. Texture_MrShoor t = LoadTexture<Texture_MrShoor>( String() );
  44. }
  45. {
  46. std::cout << "LoadTexture (ALX case)\n";
  47. Texture_ALX t = LoadTexture<Texture_ALX>( String() );
  48. }
  49. return 0;
  50. }
Success #stdin #stdout 0s 5580KB
stdin
Standard input is empty
stdout
LoadTexture (MrShoor case)
  String default ctor
  String copy
  String move
  String dtor
  String dtor
  String dtor
LoadTexture (ALX case)
  String default ctor
  String copy
  String dtor
  String dtor