fork download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. class A; // forward declaration.
  5.  
  6. class A
  7. {
  8. public:
  9. int val;
  10. void print() const { std::cout << val << std::endl; }
  11.  
  12. template <typename T>
  13. std::enable_if_t<std::is_same<int, T>::value, A&>
  14. operator=(const T& input){
  15. val = 2 * input; //Overload I
  16. return *this;
  17. }
  18. template <typename T>
  19. std::enable_if_t<std::is_same<A, T>::value, A&>
  20. operator=(T& rhs){
  21. val = 5 * rhs.val; //Overload II
  22. return *this;
  23. }
  24. };
  25.  
  26. int main()
  27. {
  28. A Aa;
  29. A Bb;
  30. int in_a = 3;
  31. Aa = in_a;
  32. Bb = Aa;
  33. Aa.print(); //This should give 6. (3x2)
  34. Bb.print(); //This should give 30. (6x5)
  35. }
  36.  
Success #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
6
30