Следующий код не компилируется под G ++ 4.8
#include <vector>
using namespace std;
int main() {
vector<int> v;
typeof(v)::iterator it;
}
Если я заменю typeof на decltype, он работает нормально. Я знаю об обходном пути со структурой шаблона
template<class T> struct Self {
typedef T Type;
};
а потом
Self<typeof(v)>::Type::Iterator it;
но все равно раздражает.
Это ошибка, о которой следует сообщить? Или это особенность?
Здесь я просто пишу комментарий н.м. как ответ и немного расширив его.
В C ++ 11 мы имеем decltype
который может быть использован с ::
, Рассмотрим следующий код:
#include <vector>
using namespace std;
int main() {
vector<int> v;
decltype(v)::iterator it;
}
Приведенный выше код компилируется g++ -std=c++11 -Wall -Wextra -pedantic typeof.cpp
,
поскольку decltype
является стандартным и уже поддерживается gcc 4.3 (выпущено в 2008 году, 6 лет назад), нет абсолютно никаких причин использовать расширение gcc typeof
вместо. Ваш код будет стандартным, следовательно, переносимым, если вы используете decltype
,