fork(1) download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4.  
  5. struct A {
  6. using my_tag = void;
  7. };
  8.  
  9. struct B {};
  10.  
  11. struct C {
  12. using my_tag = int; // with void_t also works with my_tag = int
  13. };
  14.  
  15. struct D {
  16. struct my_tag{}; //or some tested struct
  17. };
  18.  
  19. // same as your enable_if_type
  20. template <typename...>
  21. using void_t = void;
  22.  
  23.  
  24. template<class T, class Enable = void>
  25. struct has_my_tag : std::false_type {};
  26.  
  27. template<class T>
  28. struct has_my_tag<T, void_t<typename T::my_tag>> : std::true_type
  29. {};
  30.  
  31.  
  32. int main() {
  33. std::cout << has_my_tag<A>::value << std::endl;
  34. std::cout << has_my_tag<B>::value << std::endl;
  35. std::cout << has_my_tag<C>::value << std::endl;
  36. std::cout << has_my_tag<D>::value << std::endl;
  37. return 0;
  38. }
Success #stdin #stdout 0s 15232KB
stdin
Standard input is empty
stdout
1
0
1
1