#include <initializer_list>
#include <iostream>
#include <vector>

struct something
{
  std::vector < int > _Value;
  
  something( const std::initializer_list < int >& _List ) : _Value( { _List } ) {}
  std::vector < int >& get_vector() { return ( _Value ); }
  ~something() { std::cout << "destructor" << std::endl; }
};

int main()
{
  // 危険なコード
  for( auto e : something { 1,2,3,4,5,6,7,8,9,0 }.get_vector() ) // get_vectorは内部に持つvectorへの参照を返す
  { // 破棄されたオブジェクトへの参照
    std::cout << e;
  }
  std::cout << std::endl;
	
  // 安全なコード
  for( auto e : std::vector < int > { 1,2,3,4,5,6,7,8,9,0 } )
  { // 一時オブジェクトはキャプチャされ延命されている
  	std::cout << e;
  }
}
