fork download
  1. #include <iostream>
  2.  
  3. template<class T>
  4. class MyClass
  5. {
  6. public:
  7.  
  8. template<class U>
  9. friend class MyClass;
  10. T value;
  11.  
  12. template<class U>
  13. MyClass& operator=(const MyClass<U>& rhs)
  14. {
  15. std::cout << "Came to MyClass<T>::operator=(const MyClass<U>& rhs)\n";
  16. return *this;
  17. }
  18.  
  19. // Overload for MyClass<T>
  20. MyClass& operator=(const MyClass& rhs)
  21. {
  22. std::cout << "Came to MyClass<T>::operator=(const MyClass& rhs)\n";
  23. return *this;
  24. }
  25. };
  26.  
  27. template <> class MyClass<int> : public MyClass<long>
  28. {
  29. public:
  30.  
  31. template<class U>
  32. friend class MyClass;
  33. int value;
  34.  
  35. template<class U>
  36. MyClass& operator=(const MyClass<U>& rhs)
  37. {
  38. std::cout << "Came to MyClass<int>::operator=(const MyClass<U>& rhs)\n";
  39. return *this;
  40. }
  41.  
  42. MyClass& operator=(const MyClass& rhs)
  43. {
  44. std::cout << "Came to MyClass<int>::operator=(const MyClass& rhs)\n";
  45. return *this;
  46. }
  47. };
  48.  
  49. int main()
  50. {
  51. MyClass<int> obj1;
  52. MyClass<long>& ref1 = obj1;
  53.  
  54. ref1 = obj1;
  55. }
  56.  
  57.  
  58.  
Success #stdin #stdout 0.01s 16064KB
stdin
Standard input is empty
stdout
Came to MyClass<T>::operator=(const MyClass<U>& rhs)