在G ++ 4.8中,typeof仍然不能与" ::"一起使用。

时间:2014-04-17 19:43:20

标签: c++ gcc c++11 g++ gcc-extensions

以下代码无法在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 个答案:

答案 0 :(得分:4)

在这里,我只是写n.m.'s comment作为答案并稍微扩展一下。

在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是标准版和already supported by gcc 4.3(2008年发布,6年前发布),因此绝对没有理由使用gcc扩展名typeof。如果您使用decltype,您的代码将是标准的,因此是可移植的。