謎解き音ゲーマーのメモ

趣味に絡めて学んだ内容を記録するメモ帳

【C++】範囲for文の変数宣言autoは省略できた

たまたま出会った下記の範囲for文について、きちんとコンパイルされ動作されているのを見て、軽く調べたメモ。

std::vector<int> x{1,2,3};
for(i : x){  // iの変数宣言部に型指定が無い
    std::cout << i << std::endl;
}

結論

昔はサポートされており、コンパイラのほうでよしなにしてくれた。
C++17より未サポートとなり、以降はコンパイル時に怒られる。
使わないほうが安全。

詳細

検索すると下記のstackoverflowのページが引っ掛かった。 stackoverflow.com どうやら、C++17より未サポートになったようだ。

gccのバージョンを変えながらwandboxで実際に動かしてみたがどうやらそのようだ。

f:id:tsubameLaboratory:20210429112857p:plain
gcc6系
f:id:tsubameLaboratory:20210429112950p:plain
gcc5系

gcc6からC++17をサポートしており、stackoverflowの内容とも一致している。 gcc.gnu.org