Are members value initialized before the constructor initializer list executes?
<p>Take this example:</p>

<pre><code>class Foo {
private:
  const std::string m_str1;
  const std::string m_str2;

  std::string foo() {
    std::cout &lt;&lt; ("'" + m_str2 + "'") &lt;&lt; std::endl;
    return "whatever1";
  }

public:
  Foo() : m_str1(foo()), m_str2("whatever2") { }
};

int main() {
  Foo foo;
  return 0;
}
</code></pre>

<p>On my computer, it prints out '' (two single quotes one after another) indicating that m_str2 was in fact value initialized to the empty string before the constructor list was executed.</p>

<p>But is that true in general?</p>
