fork download
  1. #include <iostream>
  2. #include <type_traits>
  3. #define P(x) std::cout<<x<<std::endl
  4.  
  5. struct A {};
  6. struct B {};
  7.  
  8. struct Yoba {
  9. template<typename T>
  10. using remove_cvr_t = std::remove_reference_t<std::remove_cv_t<T>>;
  11.  
  12. template<typename T, typename T1>
  13. using cmp_type_t = std::enable_if_t<std::is_same<remove_cvr_t<T>, remove_cvr_t<T1>>::value, T>;
  14.  
  15. template<typename R, typename T>
  16. cmp_type_t<R, A>
  17. inline create(T &&p) {
  18. std::cout << "A SFINAE overload: " << p << std::endl;
  19. }
  20.  
  21. template<typename R, typename T>
  22. cmp_type_t<R, B>
  23. inline create(T &&p) {
  24. std::cout << "B SFINAE overload: " << p << std::endl;
  25. }
  26. };
  27.  
  28. int main()
  29. {
  30. Yoba y;
  31. y.create<A>(1);
  32. y.create<B>("ASS");
  33. }
Runtime error #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
A SFINAE overload: 1
A SFINAE overload: 1