fork download
  1. template <class T>
  2. struct Base{};
  3.  
  4. template <class T>
  5. struct B;
  6.  
  7. template <class T>
  8. struct A: public Base<T>
  9. {
  10. operator B<T>();
  11. };
  12.  
  13. template <typename T>
  14. B<T> operator*(const Base<T>& s1, const Base<T>& s2){ return B<T>(); }
  15.  
  16. template <class T>
  17. struct B: public Base<T>
  18. {
  19. A<T> operator[](const B&) { return A<T>(); }
  20. friend B operator* <T>(const Base<T>&, const Base<T>&);
  21. };
  22.  
  23. template <class T> A<T>::operator B<T>(){ return B<T>(); }
  24.  
  25. int main()
  26. {
  27. B<int> s1, s2, s3;
  28. s1[s2] * s3;
  29. s1[s2] * s3;
  30. s3 * s1[s2];
  31. s1[s2] * s1[s2];
  32. s3 * s3;
  33. }
Success #stdin #stdout 0s 3452KB
stdin
Standard input is empty
stdout
Standard output is empty