以下代码无法在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;
但仍然令人讨厌。
这是一个应该报告的错误吗?或者这是一个功能?
答案 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
,您的代码将是标准的,因此是可移植的。