Гибкость псевдонима шаблона в C ++ 0x

Насколько я понимаю, псевдонимы шаблонов в 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?

Или ни то, ни другое?

18
задан Peter Alexander 11 November 2010 в 09:34
поделиться