fork download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. template <class F, class G, class ... Args>
  5. auto static_if (std::true_type, F && f, G && g, Args && ... args) {
  6. return std::forward<F> (f) (std::forward<Args>(args)...);
  7. }
  8.  
  9. template <class F, class G, class ... Args>
  10. auto static_if (std::false_type, F && f, G && g, Args && ... args) {
  11. return std::forward<G> (g) (std::forward<Args>(args)...);
  12. }
  13.  
  14.  
  15. template <class T> std::true_type constexpr is_pointer (T *) { return {}; }
  16. template <class T> std::false_type constexpr is_pointer (T) { return {}; }
  17.  
  18. int main() {
  19. int x = 5;
  20. static_if (
  21. is_pointer (x),
  22. [] (auto x) { std::cout << *x << std::endl; },
  23. [] (auto x) { std::cout << "no pointer" << std::endl; },
  24. x
  25. );
  26. return 0;
  27. }
Success #stdin #stdout 0s 3412KB
stdin
Standard input is empty
stdout
no pointer