fork download
  1. #include <iostream>
  2.  
  3. template <class T, class Derived>
  4. class A {
  5. public:
  6. template <class U>
  7. void f(U& bar) {
  8. std::cout << "A's f(U&)\n";
  9. static_cast<Derived*>(this)->f(bar);
  10. }
  11.  
  12. void f(T& foo) {
  13. std::cout << "A's f(T&)\n";
  14. }
  15. };
  16.  
  17.  
  18. class B : public A<int, B>
  19. {
  20. public:
  21. template <class T>
  22. void f(T &foo) {
  23. std::cout << "B's f(T&)\n";
  24. }
  25. };
  26.  
  27.  
  28. int main() {
  29. A<int, B>* ptr = new B;
  30. ptr->f("foo");
  31. delete ptr;
  32. return 0;
  33. }
  34.  
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
A's f(U&)
B's f(T&)