<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Kollision von &amp;lt;&amp;lt; für Vector mit Boost::Variant]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen Ausgabe-Operator für Vector geschrieben</p>
<pre><code>template&lt;class T&gt; std::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, const std::vector&lt;T&gt;&amp; v)
{
	for (typename std::vector&lt;T&gt;::const_iterator it = v.begin(); it != v.end(); ++it)
		s &lt;&lt; *it &lt;&lt; &quot; &quot;;
	return s;
}
</code></pre>
<p>der sich im Namespace <code>IO</code> befindet.</p>
<p>In einem meiner Source-Dateien kommt es nun bei Verwendung des Operators zu einer Kollision mit dem, was is Boost::Variant definiert ist. So führt</p>
<pre><code>vector&lt;unsigned&gt; s = IO::size(LSPs);
	cout &lt;&lt; s &lt;&lt; endl;
	IO::operator&lt;&lt;(cout, s) &lt;&lt; endl;
</code></pre>
<p>zur Fehlermeldung</p>
<pre><code>../src/node/rev/nd_creation.cpp: In member function ‘void Node::Prob_Nd::set_anc_LSPs(boost::multi_array&lt;gsl_matrix*, 2ul, std::allocator&lt;gsl_matrix*&gt; &gt;)’:
../src/node/rev/nd_creation.cpp:99: error: no match for ‘operator&lt;&lt;’ in ‘std::cout &lt;&lt; s’
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:108: note: candidates are: std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(std::basic_ostream&lt;_CharT, _Traits&gt;&amp; (*)(std::basic_ostream&lt;_CharT, _Traits&gt;&amp;)) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:117: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(std::basic_ios&lt;_CharT, _Traits&gt;&amp; (*)(std::basic_ios&lt;_CharT, _Traits&gt;&amp;)) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:127: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(std::ios_base&amp; (*)(std::ios_base&amp;)) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:165: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(long int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:169: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(long unsigned int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:173: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(bool) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ostream.tcc:91: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(short int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:180: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(short unsigned int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ostream.tcc:105: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:191: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(unsigned int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:200: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(long long int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:204: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(long long unsigned int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:209: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(double) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:213: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(float) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:221: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(long double) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:225: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(const void*) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ostream.tcc:119: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(std::basic_streambuf&lt;_CharT, _Traits&gt;*) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/home/atlas12/ingo/workspace/Gen_Recon/src/node/alphabet.h:40: note:                 std::ostream&amp; Node::operator&lt;&lt;(std::ostream&amp;, const Node::Alphabet&amp;)
../src/node/rev/rev_nd.h:150: note:                 std::ostream&amp; Node::operator&lt;&lt;(std::ostream&amp;, const Node::Rev_Nd&amp;)
make: *** [src/node/rev/nd_creation.o] Error 1
</code></pre>
<p>bezüglich der zweiten Zeile, während die dritte fehlerlos kompiliert wird.</p>
<p>Daher die Frage: Muss ich da einen Workaround wie in der dritten Zeile machen oder gibt es da bessere Alternativen? Kein</p>
<pre><code>using namespace boost;
</code></pre>
<p>zu verwenden würde in diesem Fall zu aufwendig sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320687/kollision-von-lt-lt-für-vector-mit-boost-variant</link><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Jul 2026 18:37:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320687.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 Oct 2013 21:52:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kollision von &amp;lt;&amp;lt; für Vector mit Boost::Variant on Mon, 07 Oct 2013 21:52:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen Ausgabe-Operator für Vector geschrieben</p>
<pre><code>template&lt;class T&gt; std::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, const std::vector&lt;T&gt;&amp; v)
{
	for (typename std::vector&lt;T&gt;::const_iterator it = v.begin(); it != v.end(); ++it)
		s &lt;&lt; *it &lt;&lt; &quot; &quot;;
	return s;
}
</code></pre>
<p>der sich im Namespace <code>IO</code> befindet.</p>
<p>In einem meiner Source-Dateien kommt es nun bei Verwendung des Operators zu einer Kollision mit dem, was is Boost::Variant definiert ist. So führt</p>
<pre><code>vector&lt;unsigned&gt; s = IO::size(LSPs);
	cout &lt;&lt; s &lt;&lt; endl;
	IO::operator&lt;&lt;(cout, s) &lt;&lt; endl;
</code></pre>
<p>zur Fehlermeldung</p>
<pre><code>../src/node/rev/nd_creation.cpp: In member function ‘void Node::Prob_Nd::set_anc_LSPs(boost::multi_array&lt;gsl_matrix*, 2ul, std::allocator&lt;gsl_matrix*&gt; &gt;)’:
../src/node/rev/nd_creation.cpp:99: error: no match for ‘operator&lt;&lt;’ in ‘std::cout &lt;&lt; s’
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:108: note: candidates are: std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(std::basic_ostream&lt;_CharT, _Traits&gt;&amp; (*)(std::basic_ostream&lt;_CharT, _Traits&gt;&amp;)) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:117: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(std::basic_ios&lt;_CharT, _Traits&gt;&amp; (*)(std::basic_ios&lt;_CharT, _Traits&gt;&amp;)) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:127: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(std::ios_base&amp; (*)(std::ios_base&amp;)) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:165: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(long int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:169: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(long unsigned int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:173: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(bool) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ostream.tcc:91: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(short int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:180: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(short unsigned int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ostream.tcc:105: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:191: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(unsigned int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:200: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(long long int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:204: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(long long unsigned int) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:209: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(double) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:213: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(float) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:221: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(long double) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:225: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(const void*) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ostream.tcc:119: note:                 std::basic_ostream&lt;_CharT, _Traits&gt;&amp; std::basic_ostream&lt;_CharT, _Traits&gt;::operator&lt;&lt;(std::basic_streambuf&lt;_CharT, _Traits&gt;*) [with _CharT = char, _Traits = std::char_traits&lt;char&gt;]
/home/atlas12/ingo/workspace/Gen_Recon/src/node/alphabet.h:40: note:                 std::ostream&amp; Node::operator&lt;&lt;(std::ostream&amp;, const Node::Alphabet&amp;)
../src/node/rev/rev_nd.h:150: note:                 std::ostream&amp; Node::operator&lt;&lt;(std::ostream&amp;, const Node::Rev_Nd&amp;)
make: *** [src/node/rev/nd_creation.o] Error 1
</code></pre>
<p>bezüglich der zweiten Zeile, während die dritte fehlerlos kompiliert wird.</p>
<p>Daher die Frage: Muss ich da einen Workaround wie in der dritten Zeile machen oder gibt es da bessere Alternativen? Kein</p>
<pre><code>using namespace boost;
</code></pre>
<p>zu verwenden würde in diesem Fall zu aufwendig sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358764</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Mon, 07 Oct 2013 21:52:38 GMT</pubDate></item><item><title><![CDATA[Reply to Kollision von &amp;lt;&amp;lt; für Vector mit Boost::Variant on Mon, 07 Oct 2013 22:02:58 GMT]]></title><description><![CDATA[<pre><code>template&lt;class T&gt; std::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, const std::vector&lt;T&gt;&amp; v)
{
    for (typename std::vector&lt;T&gt;::const_iterator it = v.begin(); it != v.end(); ++it)
        s &lt;&lt; *it &lt;&lt; &quot; &quot;;
    return s;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
<pre><code>template&lt;class T&gt; std::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, const std::vector&lt;T&gt;&amp; v)
{
    std::copy( std::begin(v), std::end(v), std::ostream_iterator&lt;T&gt;{s, &quot; &quot;} );
    return s;
}
</code></pre>
<p>Es dürfte doch offensichtlich sein, dass ADL nicht im Namensraum IO nachsieht. Also entweder machst du den bekannt, oder du rufst explizit die Operatorfunktion auf.</p>
<p>Oder du überlädst den Operator außerhalb von IO. Wobei das ja irgendein Problem zu verursachen scheint.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358765</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 07 Oct 2013 22:02:58 GMT</pubDate></item><item><title><![CDATA[Reply to Kollision von &amp;lt;&amp;lt; für Vector mit Boost::Variant on Mon, 07 Oct 2013 22:01:59 GMT]]></title><description><![CDATA[<p>Moment mal, was hat Boost.Variant mit <code>std::vector</code> zu tun?</p>
<blockquote>
<p>In einem meiner Source-Dateien kommt es nun bei Verwendung des Operators zu einer Kollision mit dem, was is Boost::Variant definiert ist.</p>
</blockquote>
<p>Wieso sollte Boost.Variant den Ausgabeoperator für <code>vector</code> definieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358766</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 07 Oct 2013 22:01:59 GMT</pubDate></item><item><title><![CDATA[Reply to Kollision von &amp;lt;&amp;lt; für Vector mit Boost::Variant on Tue, 08 Oct 2013 03:32:34 GMT]]></title><description><![CDATA[<ul>
<li>schrieb:</li>
</ul>
<blockquote>
<pre><code>template&lt;class T&gt; std::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, const std::vector&lt;T&gt;&amp; v)
{
    for (typename std::vector&lt;T&gt;::const_iterator it = v.begin(); it != v.end(); ++it)
        s &lt;&lt; *it &lt;&lt; &quot; &quot;;
    return s;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
<pre><code>template&lt;class T&gt; std::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, const std::vector&lt;T&gt;&amp; v)
{
    std::copy( std::begin(v), std::end(v), std::ostream_iterator&lt;T&gt;{s, &quot; &quot;} );
    return s;
}
</code></pre>
</blockquote>
<p>irrelevant. Und bitte ändere den Namen. * ist nicht höflich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358785</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 08 Oct 2013 03:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to Kollision von &amp;lt;&amp;lt; für Vector mit Boost::Variant on Tue, 08 Oct 2013 06:20:42 GMT]]></title><description><![CDATA[<p>in der Fehlermeldung kommt boost nicht einmal vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358794</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 08 Oct 2013 06:20:42 GMT</pubDate></item><item><title><![CDATA[Reply to Kollision von &amp;lt;&amp;lt; für Vector mit Boost::Variant on Tue, 08 Oct 2013 12:08:48 GMT]]></title><description><![CDATA[<blockquote>
<p>Und bitte ändere den Namen. * ist nicht höflich.</p>
</blockquote>
<p>Leute, die Email an Markus ist schon laengst verschickt! Vor Tagen!</p>
<blockquote>
<p>irrelevant.</p>
</blockquote>
<p>War ein Tipp wie man es direkter schreiben kann, ohne eine ellenlange <code>for</code> -Schleife mit <code>const_iterator</code> en.<br />
Edit: Das war natuerlich fuer C++03, ich habe es aus Versehen mit C++11 gemixt...<br />
In C++11 wuerde man direct zu einer huebschen Schleife tendieren:</p>
<pre><code>for( auto const&amp; e : v )
    std::cout &lt;&lt; e &lt;&lt; ' ';
</code></pre>
<p>otze schrieb:</p>
<blockquote>
<p>in der Fehlermeldung kommt boost nicht einmal vor.</p>
</blockquote>
<p>Eben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> Was hat Boost damit zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358818</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Tue, 08 Oct 2013 12:08:48 GMT</pubDate></item><item><title><![CDATA[Reply to Kollision von &amp;lt;&amp;lt; für Vector mit Boost::Variant on Tue, 08 Oct 2013 12:25:00 GMT]]></title><description><![CDATA[<p>ingobulla schrieb:</p>
<blockquote>
<p>Hallo,<br />
ich habe ein[ Problem]</p>
</blockquote>
<p>Hallo ingobulla. Es sieht so aus, als sei das ein Problem, bei dem du noch etwas zum Thema<br />
Namensauflösung zu lernen hast. Leider hast du kein vollständiges Minimalbeispiel<br />
gepostet. Bitte versuch dein Problem auf ein vollständiges Minimalbeispiel zu reduzieren.<br />
Z.B. so etwas:</p>
<pre><code class="language-cpp">namespace s {
  struct vec {};
}

namespace io {
  void func(s::vec&amp;);
}

namespace test {

void func(int&amp;);

void test()
{
    using namespace io;
    s::vec v = {};
    func(v); // findet trotz using-Direktive mein io::func nicht :-(
}

} // namespace test

int main()
{
    test::test();
}
</code></pre>
<p>Deine Code-Fragmente sind weit von einem vollständigen Beispiel entfernt, dass man da<br />
eigentlich fast nichts zu sagen kann.</p>
<p>Ergänzung:<br />
Sehr wahrscheinlich hast du hier ein &quot;name hiding&quot; Problem. Dein <code>operator&lt;&lt;</code> kann<br />
nicht per ADL (argument dependent lookup) gefunden werden, weil er gar nicht in einem<br />
dem std::vector assoziierten Namensraum (std) deklariert wurde. Eine using-Direktive,<br />
also <code>using namespace IO;</code> kann dir hier nur bedingt helfen, weil die Namenssuche<br />
schon vorher abbrechen kann, bevor der Namensraum IO untersucht wird. Das siehst du auch<br />
in meinem Beispiel. Bevor io durchsucht wird, findet der Compiler test::func und hört<br />
mit der &quot;normalen&quot; Namenssuche auf. ADL kommt dann zum Einsatz. aber ADL durchsucht hier<br />
nur noch den Namensraum <code>s</code> . Und da gibt's kein <code>func</code> .</p>
<p>In meinem Beispiel kann man jetzt die using-Direktive durch eine using-Deklaration ersetzen:<br />
<code>using io::func;</code> . Allerdings ist das keine Lösung für boost::variant. boost::variant<br />
weiß nicht, dass zum vector der passende operator&lt;&lt; im Namensraum IO ist. Du benutzt also<br />
entweder für die Ausgabe einen eigenen Visitor oder wrappst den Vektor in einer eigenen<br />
Klasse</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class myvec
{
  std::vector&lt;T&gt; vec_;
  :::
};
</code></pre>
<p>wobei operator&lt;&lt; in demselben Namensraum deklariert werden muss, damit er per ADL gefunden<br />
werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358836</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 08 Oct 2013 12:25:00 GMT</pubDate></item><item><title><![CDATA[Reply to Kollision von &amp;lt;&amp;lt; für Vector mit Boost::Variant on Wed, 09 Oct 2013 08:51:04 GMT]]></title><description><![CDATA[<blockquote>
<p>Bevor io durchsucht wird, findet der Compiler test::func und hört mit der &quot;normalen&quot; Namenssuche auf.</p>
</blockquote>
<p>Und wieso wird io erst nach test durchsucht, obwohl wir doch die using-<s>Deklaration</s>Direktive direkt in der Funktion stehen haben?<br />
Weil:</p>
<blockquote>
<p>A <em>using-directive</em> specifies that the names in the nominated namespace can be used in the scope in which the <em>using-directive</em> appears after the <em>using-directive</em>.<br />
During unqualified name lookup (3.4.1), the names appear as if they were declared in the nearest enclosing namespace which contains both the <em>using-directive</em> and the nominated namespace.</p>
</blockquote>
<p>Das heißt, func wird vom Namelookup als ein Member des globalen Namensraums behandelt - und es wird ja schließlich zuerst in den innersten und erst dann in den äußeren Scopes gesucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358991</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 09 Oct 2013 08:51:04 GMT</pubDate></item><item><title><![CDATA[Reply to Kollision von &amp;lt;&amp;lt; für Vector mit Boost::Variant on Wed, 09 Oct 2013 08:40:00 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<blockquote>
<p>Bevor io durchsucht wird, findet der Compiler test::func und hört mit der &quot;normalen&quot; Namenssuche auf.</p>
</blockquote>
<p>Und wieso wird io erst nach test durchsucht, obwohl wir doch die using-Deklaration direkt in der Funktion stehen haben?</p>
</blockquote>
<p>Du meintest sicherlich &quot;using-Direktive&quot;.</p>
<p>Anyhow, danke für's Raussuchen und Zitieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359049</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 09 Oct 2013 08:40:00 GMT</pubDate></item><item><title><![CDATA[Reply to Kollision von &amp;lt;&amp;lt; für Vector mit Boost::Variant on Wed, 09 Oct 2013 08:50:34 GMT]]></title><description><![CDATA[<p>Ups, da habe ich mich verschrieben.<br />
<code>using</code> -Deklaration wäre natürlich etwas a la</p>
<pre><code>using io::func;
</code></pre>
<p>Und das ist gerade, was ja funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359052</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 09 Oct 2013 08:50:34 GMT</pubDate></item></channel></rss>