Рассмотрим этот класс:
class Foo
{
public:
~ Foo ()
{
std::cout << "~Foo\n";
}
typedef std::vector<std::string> Words;
const Words & words ()
{
return m_words;
}
private:
Words m_words = {"foo", "bar", "baz"};
};
Раздел 12.2 стандарта C ++ определяет время жизни временных объектов.Я думал, что все будет в порядке:
for (auto w : Foo () .words ())
std::cout << w << "\n";
Но это не было
~Foo
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid
[1] 10290 abort (core dumped) ./a.out
Стандарт меня смущает.Почему ~Foo
вызывается до запуска цикла?