fork download
  1. #include <iostream>
  2.  
  3. struct My
  4. {
  5. typedef int foo;
  6. };
  7.  
  8. struct My2
  9. {
  10. };
  11.  
  12. template<typename T, typename I=int> struct call_traits {
  13. static void Bar(...)
  14. {
  15. std::cout << "...\n";
  16. }
  17. };
  18.  
  19. template<typename T> struct call_traits<T, typename T::foo> {
  20. static void Bar(const T&, int z=typename T::foo())
  21. {
  22. std::cout << "My\n";
  23. }
  24. };
  25.  
  26. template<typename T> void Bar(const T& t)
  27. {
  28. call_traits<T>::Bar(t);
  29. }
  30.  
  31. int main()
  32. {
  33. My my;
  34. Bar(my); // OK
  35. My2 my2;
  36. Bar(my2); // Still OK
  37. return 0;
  38. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
My
...