範囲for文の構文は以下のようになっています:
for ( for-range-declaration : expression ) statement
要素の部分がfor-range-declaration、すなわち宣言を要求しています。なので、以下のような変数を先に定義しておいて、毎回各要素を代入する、というようなコードは直接は書けません。
#include <iostream> #include <vector> int main() { const std::vector<int> v = {1, 2, 3}; int x = 0; for (x : v) { // エラー!xは変数宣言でなくてはならない std::cout << x << std::endl; } }
BoostにあるBOOST_FOREACHマクロは、このような表記を許可していますので、完全な置き換えができない点ですね。