title: valgrind complains Conditional jump or move depends on uninitialised value(s)
body: <p>I've been running my application through valgrind due to other various issues, and I keep seeing warnings about:</p>
  
  <pre><code>==26447== Conditional jump or move depends on uninitialised value(s)
  ==26447==    at 0x5C244F: int std::__int_to_char&lt;char, unsigned long&gt;(char*, unsigned long, char const*, std::_Ios_Fmtflags, bool) (in /home/alex/projects/Icarus/trunk/build/icarus)
  ==26447==    by 0x5C2BB3: std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt; std::num_put&lt;char, std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt; &gt;::_M_insert_int&lt;unsigned long&gt;(std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;, std::ios_base&amp;, char, unsigned long) const (in /home/alex/projects/Icarus/trunk/build/icarus)
  ==26447==    by 0x5C2E1C: std::num_put&lt;char, std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt; &gt;::do_put(std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;, std::ios_base&amp;, char, unsigned long) const (in /home/alex/projects/Icarus/trunk/build/icarus)
  ==26447==    by 0x5DB0BD: std::ostream&amp; std::ostream::_M_insert&lt;unsigned long&gt;(unsigned long) (in /home/alex/projects/Icarus/trunk/build/icarus)
  ==26447==    by 0x55C9B8: ExampleProcessor::Process(std::shared_ptr&lt;Example&gt;) (ExampleProcessor.hpp:49)
  ==26447==    by 0x55D139: Controller::FIFO(std::shared_ptr&lt;Message&gt;) (Controller.hpp:51)
  ==26447==    by 0x55D7C2: TCPConnection::respond(std::string) (TCPConnection.hpp:71)
  ==26447==    by 0x55DC5E: TCPConnection::handle_read(boost::system::error_code const&amp;, unsigned long) (TCPConnection.hpp:144)
  ==26447==    by 0x595CD8: void boost::_mfi::mf2&lt;void, TCPConnection, boost::system::error_code const&amp;, unsigned long&gt;::call&lt;boost::shared_ptr&lt;TCPConnection&gt;, boost::system::error_code const, unsigned long&gt;(boost::shared_ptr&lt;TCPConnection&gt;&amp;, void const*, boost::system::error_code const&amp;, unsigned long&amp;) const (mem_fn_template.hpp:271)
  ==26447==    by 0x591412: void boost::_mfi::mf2&lt;void, TCPConnection, boost::system::error_code const&amp;, unsigned long&gt;::operator()&lt;boost::shared_ptr&lt;TCPConnection&gt; &gt;(boost::shared_ptr&lt;TCPConnection&gt;&amp;, boost::system::error_code const&amp;, unsigned long) const (mem_fn_template.hpp:286)
  ==26447==    by 0x58A46D: void boost::_bi::list3&lt;boost::_bi::value&lt;boost::shared_ptr&lt;TCPConnection&gt; &gt;, boost::arg&lt;1&gt; (*)(), boost::arg&lt;2&gt; (*)()&gt;::operator()&lt;boost::_mfi::mf2&lt;void, TCPConnection, boost::system::error_code const&amp;, unsigned long&gt;, boost::_bi::list2&lt;boost::system::error_code const&amp;, unsigned long const&amp;&gt; &gt;(boost::_bi::type&lt;void&gt;, boost::_mfi::mf2&lt;void, TCPConnection, boost::system::error_code const&amp;, unsigned long&gt;&amp;, boost::_bi::list2&lt;boost::system::error_code const&amp;, unsigned long const&amp;&gt;&amp;, int) (bind.hpp:392)
  ==26447==    by 0x5812BD: void boost::_bi::bind_t&lt;void, boost::_mfi::mf2&lt;void, TCPConnection, boost::system::error_code const&amp;, unsigned long&gt;, boost::_bi::list3&lt;boost::_bi::value&lt;boost::shared_ptr&lt;TCPConnection&gt; &gt;, boost::arg&lt;1&gt; (*)(), boost::arg&lt;2&gt; (*)()&gt; &gt;::operator()&lt;boost::system::error_code, unsigned long&gt;(boost::system::error_code const&amp;, unsigned long const&amp;) (bind_template.hpp:102)
  ==26447==  Uninitialised value was created by a stack allocation
  ==26447==    at 0x553EAA: ConceptGraph::makeHash() (ConceptGraph.hpp:258)
  </code></pre>
  
  <p>So, I read around a bit, and found that I can import memcheck, and ask for specific memory requests:</p>
  
  <pre><code>std::size_t makeHash ( )
  {
    std::size_t tmp;
  
    for ( auto &amp; concept : _concepts )
       tmp += concept-&gt;Hash();
  
    for ( auto &amp; relation : _relations )
       tmp += relation-&gt;Hash();
  
    for ( auto &amp; edge : _adjacency_list )
       tmp += std::hash&lt;std::size_t&gt;()( edge.first-&gt;Hash() + edge.second-&gt;Hash() );
  
    _hash = std::hash&lt;std::size_t&gt;()( tmp );
  
    VALGRIND_CHECK_MEM_IS_DEFINED ( _hash, sizeof(std::size_t) );
  
    return _hash;
  }
  </code></pre>
  
  <p>The actual offending line from which the hole shebang originates from is:</p>
  
  <pre><code>std::stringstream hash;
  hash &lt;&lt; graph-&gt;Hash();
  </code></pre>
  
  <p>Which I know is initialized and OK.</p>
  
  <p>What does that mean?</p>
  
  <p>If I understand correctly, that its a warning that bytes <em>might</em> be lost ?</p>
  
  <p>Is this a false positive, or am I missing something else?</p>