Указатель на имя пользователя

Учти это:

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.

0

Решение

Как указано в комментариях, у вас есть 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 не может быть использован здесь.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]