2012-11-09 3 views
0

Я не уверен, почему я получаю сообщение об ошибке в этой строке.remove_pointer + typename is error

Я компиляции с

$CPP -g -std=c++0x -Wall 

Где $ CPP является г ++ - 4.7. Я включаю type_traits (C++ 11, а не boost). Это еще не подтверждено в 4.7.2?

typedef typename remove_pointer<typename T>::type &U; 

Ошибка

file.h:222:44: error: template argument 1 is invalid 
file.h:222:19: error: expected nested-name-specifier 
file.h:222:47: error: typedef name may not be a nested-name-specifier 
file.h:222:47: error: expected ‘;’ at end of member declaration 
file.h:222:53: error: ISO C++ forbids declaration of ‘U’ with no type [-fpermissive] 
+0

Не могли бы вы показать код вокруг этого утверждения? Например, откуда «Т»? –

+0

Что вы пытаетесь сделать? Этот синтаксис определенно плохо сформирован в C++ 11. Если 'T' является параметром типа шаблона в области видимости, перед ним следует удалить' typename'. – JohannesD

ответ

3

typename в typename T неправильна; typename используется только для зависимых имен. Напишите:

typedef typename remove_pointer<T>::type &U;