template<typename T> class has_key_type { private: template<typename U> static std::true_type test(typename U::key_type*); template<typename U> static std::false_type test(...); public: using type = decltype(test<T>(nullptr)); static constexpr bool value = type::value; }; template<typename T> using has_key_type_t = typename has_key_type<T>::type; template<typename T> constexpr bool has_key_type_v = has_key_type_t<T>::value;



내부에 key_type 타입정의를 가지고 있는지 검사해서 맞으면 맵-like, 아니면 벡터-like으로 구분하고 있는데 너무 좀스러운거 같음...