ループの範囲で一時オブジェクトを反復処理しようとしています。ループの実行が始まる前に、オブジェクトが破棄されたようです。これは標準に準拠した動作ですか? gcc 4.8 を使用しています。
#include <iostream>
#include <vector>
#include <memory>
struct Test: std::vector<int> {
Test(): std::vector<int>{1,2,3} {
std::cout << __PRETTY_FUNCTION__ << '\n';
}
~Test() {
std::cout << __PRETTY_FUNCTION__ << '\n';
}
};
std::shared_ptr<Test> func() {
return std::shared_ptr<Test>(new Test);
}
int main() {
for (const auto &obj: *func()) {
std::cout << obj << '\n';
}
}
結果は次のとおりです。
Test::Test()
Test::~Test()
21770300
0
33
0
0
0
3