Visual C++ Team Blog - STL Breaking Changes in Visual Studio 2010 Beta 1
VC++10では、STLに破壊的な変更が行われるそうです。
(C++0xには関係ない変更。Microsoftが破壊的な変更なんてめずらしい…。)
以下のコードは、VC++9 SP1まではコンパイルが通りますが、VC++10ではエラーになります。
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> v; v.push_back(3); v.push_back(1); v.push_back(4); copy(v.begin(), v.end(), ostream_iterator<int>(cout, "\n")); // VC9 : OK // VC10 : エラー!ostream_iteratorが定義されていません }
VC++10では、ostream_iteratorやback_inserter等を使用するために
<iterator>をインクルードする必要があります。
#include <iostream> #include <vector> #include <algorithm> #include <iterator> // 追加 using namespace std; int main() { vector<int> v; v.push_back(3); v.push_back(1); v.push_back(4); copy(v.begin(), v.end(), ostream_iterator<int>(cout, "\n")); // VC9 : OK // VC10 : OK }
VC++9までは、<iterator>が<algorithm>内でインクルードされてしまう(バグではない)ため
GCCのような他のコンパイラに持っていったときにエラーになることが多かったので
個人的にはうれしい変更です。