Рассмотрим это:Указатель на член TypeName
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;
}
Почему второй не удается, и что такое правильный способ, чтобы получить желаемый ЬурейеЕ в одном ЬурейеЕ заявлении?
Мой компилятор GCC-4.7.2.
Работает ли он как 'typedef int VectorType :: value_type :: * MMM'? –
@KerrekSB Я считаю, что вы должны обратить это на ответ, «typename» явно избыточно там (нет идентификатора справа от '::'). – Angew
@Angew: Это не просто * лишний *. Неправильно использовать 'typename' там. – Nawaz