1

次のコードは、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;

それでも迷惑です。

これは報告すべきバグですか?それともこれが特徴?

4

1 に答える 1

4

ここでは、 nm のコメントを回答として書き上げ、それを少し拡張しています。

C++11 では、decltypewhich で使用できるものがあります::。次のコードを検討してください。

#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 (6 年前の 2008 年にリリース) で既にサポートされているため、代わりに gcc 拡張機能を使用する理由はまったくありませんtypeof。を使用すると、コードは標準になるため、移植可能になりますdecltype

于 2014-04-18T08:58:14.127 に答える