title: VS2012 -> VS2013 upgrade leaves some of my code no longer compiling
body: <p>My project contains a class thus:</p>
  
  <pre><code>struct tweaker
  {
      virtual std::ostream&amp; peek(std::ostream&amp;)   const = 0;
      virtual std::ostream&amp; script(std::ostream&amp;) const;
      const char* Name;
  };
  </code></pre>
  
  <p>and a function thus:</p>
  
  <pre><code>std::ostream&amp; tweaker::script(std::ostream&amp; Os) const
  {
      return Os &lt;&lt; std::string(Name) &lt;&lt; " " &lt;&lt; peek(Os) &lt;&lt; "; # ";
  }
  </code></pre>
  
  <p>This compiled in VS2012, but VS2013 tells me</p>
  
  <pre><code>1&gt;environment_variables.cpp(28): error C2678: binary '&lt;&lt;' : no operator found which takes a left-hand operand of type 'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;' (or there is no acceptable conversion)
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(498): could be 'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(std::basic_streambuf&lt;char,std::char_traits&lt;char&gt;&gt; *)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(478): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(const void *)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(458): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(long double)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(438): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(double)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(418): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(float)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(397): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(unsigned __int64)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(377): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(__int64)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(356): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(unsigned long)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(336): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(long)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(316): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(unsigned int)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(291): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(int)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(271): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(unsigned short)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(237): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(short)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(217): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(std::_Bool)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(210): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(std::ios_base &amp;(__cdecl *)(std::ios_base &amp;))'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(203): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(std::basic_ios&lt;char,std::char_traits&lt;char&gt;&gt; &amp;(__cdecl *)(std::basic_ios&lt;char,std::char_traits&lt;char&gt;&gt; &amp;))'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(197): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator &lt;&lt;(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;(__cdecl *)(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;))'
  1&gt;          c:\users\guy\documents\game_dev\ggl\environment_variables.h(191): or       'std::ostream &amp;operator &lt;&lt;(std::ostream &amp;,const ggl::tweaker &amp;)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(699): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::operator &lt;&lt;&lt;char,std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;,const char *)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(746): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::operator &lt;&lt;&lt;char,std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;,char)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(784): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;,const char *)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(831): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;,char)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(957): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;,const signed char *)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(964): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;,signed char)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(971): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;,const unsigned char *)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(978): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::operator &lt;&lt;&lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;,unsigned char)'
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(988): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::operator &lt;&lt;&lt;char,std::char_traits&lt;char&gt;,std::ostream&gt;(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;&amp;,const _Ty &amp;)'
  1&gt;          with
  1&gt;          [
  1&gt;              _Ty=std::ostream
  1&gt;          ]
  1&gt;          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ostream(1026): or       'std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::operator &lt;&lt;&lt;char,std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;,const std::error_code &amp;)'
  1&gt;          while trying to match the argument list '(std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;, std::ostream)'
  </code></pre>
  
  <p>I'm guessing that MS is being a little more picky about what it waves through, and I need to offer some disambiguation somewhere.  The obvious fix is</p>
  
  <pre><code>std::ostream&amp; tweaker::script(std::ostream&amp; Os) const
  {
      Os &lt;&lt; std::string(Name) &lt;&lt; " ";
      peek(Os);
      return Os &lt;&lt; "; # ";
  }
  </code></pre>
  
  <p>but that doesn't solve the larger problem.  Any clues?</p>