Мне пришлось тяжело отлаживать крах при производстве. Просто хотел подтвердить, что у нас здесь семантика. У нас есть класс вроде...
class Test {
public:
  Test()
  {
    // members initialized ...
    m_str = m_str;
  }
  ~Test() {}
private:
  // other members ...
  std::string m_str;
};
Кто-то изменил инициализацию, чтобы использовать списки инициализации ctor, которые являются разумно правильными в нашей семантике кода. Порядок инициализации и их начальное значение являются правильными между прочим. Итак, класс выглядит как...
class Test {
public:
  Test() 
    : /*other inits ,,, */ m_str(m_str)
  {
  }
  ~Test() {}
private:
  // other members ...
  std::string m_str;
};
Но код внезапно начал сбой! Я выделил длинный список inits для этого фрагмента кода m_str(m_str). Я подтвердил это через текст ссылки.
Нужно ли это терпеть крах? Что говорит об этом стандарт? (Это поведение undefined?)