#include <iostream>
#include <type_traits>


struct A {
  using my_tag = void;
};

struct B {};

struct C {
  using my_tag = int; // with void_t also works with my_tag = int
};

struct D {
  struct my_tag{}; //or some tested struct
};

// same as your enable_if_type
template <typename...>
using void_t = void;


template<class T, class Enable = void>
struct has_my_tag : std::false_type {};

template<class T>
struct has_my_tag<T, void_t<typename T::my_tag>> : std::true_type
{};


int main() {
	std::cout << has_my_tag<A>::value << std::endl;
	std::cout << has_my_tag<B>::value << std::endl;
	std::cout << has_my_tag<C>::value << std::endl;
	std::cout << has_my_tag<D>::value << std::endl;
	return 0;
}