fork download
  1. #include <iostream>
  2. #include <type_traits>
  3. #include <functional>
  4.  
  5. #if 1
  6. template <typename F>
  7. auto myFunc(F f) -> decltype(!f('0'), std::function<bool(char)>(f), void()) {
  8. std::cout << "std::function<bool(char)> overload" << std::endl;
  9. }
  10. #else
  11. template <typename F>
  12. void myFunc(F f, typename std::enable_if<std::is_constructible<
  13. std::function<bool(char)>, F>::value>::type* = nullptr)
  14. {
  15. std::cout << "std::function<bool(char)> overload" << std::endl;
  16. }
  17. #endif
  18.  
  19.  
  20. void myFunc(const std::string &seperator) {
  21. std::cout << "std::string overload" << std::endl;
  22. }
  23.  
  24. bool testCallback(char) {
  25. return true;
  26. }
  27.  
  28. int main()
  29. {
  30. myFunc("String literal");
  31. myFunc(std::string("std::string"));
  32. myFunc(testCallback);
  33. }
  34.  
Success #stdin #stdout 0s 2984KB
stdin
Standard input is empty
stdout
std::string overload
std::string overload
std::function<bool(char)> overload