В G ++ 4.8 typeof по-прежнему нельзя использовать с & quot; :: & quot;

Следующий код не компилируется под 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;

но все равно раздражает.

Это ошибка, о которой следует сообщить? Или это особенность?

1

Решение

Здесь я просто пишу комментарий н.м. как ответ и немного расширив его.

В 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,

4

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


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