Возможно, вы ожидаете какую-то магию, которая заставляет работать черты типа. В таком случае разочаровывайтесь - волшебства нет. Типовые черты вручную определены для каждого типа. Например, рассмотрим iterator_traits
, который предоставляет typedefs (например, value_type
) для итераторов.
Используя их, вы можете написать
iterator_traits<vector<int>::iterator>::value_type x;
iterator_traits<int*>::value_type y;
// `x` and `y` have type int.
Но чтобы это работало, на самом деле в заголовке <iterator>
есть явное определение , которое выглядит примерно так:
template <typename T>
struct iterator_traits<T*> {
typedef T value_type;
// …
};
Это частичная специализация типа iterator_traits
для типов вида T*
, т.е. указатели некоторого универсального типа.
В том же духе iterator_traits
специализируются для других итераторов, например typename vector<T>::iterator
.