Учти это:
template < typename VectorType >
void ff()
{
// This passes.
typedef typename VectorType::value_type VV;
typedef int VV::* MM;
// This FAILS!??
typedef int typename VectorType::value_type::* MMM;
}
Почему второй сбой и как правильно получить требуемый typedef в одной инструкции typedef?
Мой компилятор — GCC-4.7.2.
Как указано в комментариях, у вас есть typename
где не должно быть:
typedef int typename VectorType::value_type::* MMM;
должно быть просто:
typedef int VectorType::value_type::* MMM;
typename
используется, когда у вас есть a::b
внутри шаблона, a
зависит от параметров шаблона и b
это тип. В этом случае вы должны использовать typename a::b
сообщить об этом факте компилятору.
С другой стороны, вы делаете a::b::*
, что является четким показателем того, что b
должен быть типом, так typename
не может быть использован здесь.
Других решений пока нет …