В C ++ 17 я пытаюсь обнаружить контейнеры (карты), проверяя наличие value_type
(mapped_type
). Тем не менее, хотя он работает для unordered_set<int>
, он не работает для unordered_set<int*>
, что я считаю странным Можете ли вы сказать мне, почему и как это сделать правильно?
template<class N, class T = int>
struct is_container { static const bool value = false; };
template<class N>
struct is_container<N, typename N::value_type> { static const bool value = true; };
template<class N>
static constexpr bool is_container_v = is_container<remove_reference_t<N>>::value;
int main()
{
cout << is_container_v<unordered_set<int>&> << '\n';
cout << is_container_v<unordered_set<int*>&> << '\n';
}
вывод:
1
0
PS: я видел этот вопрос , который фильтрует по присутствию begin()
, но это не помогает сказать map
из set
.