Как я понимаю, псевдонимы шаблонов в C ++ 0x позволят нам сделать следующее:
template <typename T>
using Dictionary = std::map< std::string, T >;
Dictionary<int> ints;
ints[ "one" ] = 1;
ints[ "two" ] = 2;
У меня есть два вопроса:
Сначала мы сможем сделатьэто (привязка к любому типу или только к шаблонам):
template <typename Iter>
using ValueType = std::iterator_traits<Iter>::value_type;
Во-вторых, использование псевдонимов потребует использования ключевого слова typename
в шаблонах, например:
template <typename Iter>
typename ValueType<Iter> sum(Iter first, Iter last) { ... }
// ^ required?
Илиэто требуется в объявлении псевдонима?
using ValueType = typename std::iterator_traits<Iter>::value_type;
// ^ required?
Или ни того, ни другого?