title: Noexcept and copy, move constructors
body: <p>Everywhere I look it seems to be the agreement that the standard library must call copy constructors instead of move constructors when the move constructor is noexcept(false).</p>
  
  <p>Now I do not understand why this is the case. And futher more Visual Studio VC v140 and gcc v 4.9.2 seems to do this differently.</p>
  
  <p>I do not understand why noexcept this is a concern of e.g. vector. I mean how should vector::resize() be able to give strong exception guarantee if T does not. As I see it the exception level of vector will be dependend on T. Regardless if copy or move is used.
  I understand noexcept to solely be a wink to the compiler to do exception handling optimization.</p>
  
  <p>This little program calls the copy constructor when compiled with gcc and move constructor when compiled with Visual Studio.</p>
  
  <pre><code>include &lt;iostream&gt;
  #include &lt;vector&gt;
  
  struct foo {
    foo() {}
    //    foo( const foo &amp; ) noexcept { std::cout &lt;&lt; "copy\n"; }
    //    foo( foo &amp;&amp; ) noexcept { std::cout &lt;&lt; "move\n"; }
    foo( const foo &amp; )  { std::cout &lt;&lt; "copy\n"; }
    foo( foo &amp;&amp; )  { std::cout &lt;&lt; "move\n"; }
  
    ~foo() noexcept {}
  };
  
  int main() {
      std::vector&lt; foo &gt; v;
      for ( int i = 0; i &lt; 3; ++i ) v.emplace_back();
  }
  </code></pre>