<?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[boost::variant printer]]></title><description><![CDATA[<p>Hallo,<br />
ich habe noch eine Frage zum Template boost::variant.<br />
Ich habe folgenden Code geschrieben:</p>
<pre><code>typedef uint32_t int32;
typedef float float32;
typedef char char8;
typedef std::basic_string&lt;char8&gt; string;
typedef std::vector&lt;string&gt; List;

inline std::ostream&amp; operator&lt;&lt;(std::ostream &amp;ostream, const List &amp;list)
{
	return (ostream &lt;&lt; boost::algorithm::join&lt;List, string&gt;(list, &quot;:&quot;));
}

typedef boost::variant&lt;
int32,
float32,
string,
bool,
char8,
List
&gt; ValueBase;
</code></pre>
<p>Für den Typ &quot;List&quot; habe ich extra den &lt;&lt;-Operator überladen, damit ich ein Objekt des variant-Typs in cout ausgeben kann:</p>
<pre><code>std::cout &lt;&lt; ValueBase() &lt;&lt; std::endl;
</code></pre>
<p>Dieser Code erzeugt jedoch eine Menge Fehlermeldungen im Zusammenhang mit boost::detail::variant::printer und auch dem Typ List. So wie ich das sehe, verwendet boost::detail::variant::printer jedoch den stink normalen &lt;&lt;-Operator.<br />
Wieso funktioniert das dann nicht?</p>
<blockquote>
<p>/usr/include/boost-1_46/boost/variant/detail/variant_io.hpp: In member function ‘void boost::detail::variant::printer&lt;OStream&gt;::operator()(const T&amp;) const [with T = std::vector&lt;std::basic_string&lt;char&gt; &gt;, OStream = std::basic_ostream&lt;char&gt;]’:<br />
/usr/include/boost-1_46/boost/variant/variant.hpp:832:32: instantiated from ‘boost::detail::variant::invoke_visitor&lt;Visitor&gt;::result_type boost::detail::variant::invoke_visitor&lt;Visitor&gt;::internal_visit(T&amp;, int) [with T = const std::vector&lt;std::basic_string&lt;char&gt; &gt;, Visitor = boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt;, boost::detail::variant::invoke_visitor&lt;Visitor&gt;::result_type = void]’<br />
/usr/include/boost-1_46/boost/variant/detail/visitation_impl.hpp:130:9: instantiated from ‘typename Visitor::result_type boost::detail::variant::visitation_impl_invoke_impl(int, Visitor&amp;, VoidPtrCV, T*, mpl_::true_) [with Visitor = boost::detail::variant::invoke_visitor&lt;boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt; &gt;, VoidPtrCV = const void*, T = std::vector&lt;std::basic_string&lt;char&gt; &gt;, typename Visitor::result_type = void, mpl_::true_ = mpl_::bool_&lt;true&gt;]’<br />
/usr/include/boost-1_46/boost/variant/detail/visitation_impl.hpp:173:9: instantiated from ‘typename Visitor::result_type boost::detail::variant::visitation_impl_invoke(int, Visitor&amp;, VoidPtrCV, T*, NoBackupFlag, int) [with Visitor = boost::detail::variant::invoke_visitor&lt;boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt; &gt;, VoidPtrCV = const void*, T = std::vector&lt;std::basic_string&lt;char&gt; &gt;, NoBackupFlag = boost::variant&lt;unsigned int, float, std::basic_string&lt;char&gt;, bool, char, std::vector&lt;std::basic_string&lt;char&gt; &gt; &gt;::has_fallback_type_, typename Visitor::result_type = void]’<br />
/usr/include/boost-1_46/boost/variant/detail/visitation_impl.hpp:260:1: instantiated from ‘typename Visitor::result_type boost::detail::variant::visitation_impl(int, int, Visitor&amp;, VoidPtrCV, mpl_::false_, NoBackupFlag, Which*, step0*) [with Which = mpl_::int_&lt;0&gt;, step0 = boost::detail::variant::visitation_impl_step&lt;boost::mpl::l_iter&lt;boost::mpl::l_item&lt;mpl_::long_&lt;6l&gt;, unsigned int, boost::mpl::l_item&lt;mpl_::long_&lt;5l&gt;, float, boost::mpl::l_item&lt;mpl_::long_&lt;4l&gt;, std::basic_string&lt;char&gt;, boost::mpl::l_item&lt;mpl_::long_&lt;3l&gt;, bool, boost::mpl::l_item&lt;mpl_::long_&lt;2l&gt;, char, boost::mpl::l_item&lt;mpl_::long_&lt;1l&gt;, std::vector&lt;std::basic_string&lt;char&gt; &gt;, boost::mpl::l_end&gt; &gt; &gt; &gt; &gt; &gt; &gt;, boost::mpl::l_iter<a href="boost::mpl::l%5C_end" rel="nofollow">boost::mpl::l\_end</a> &gt;, Visitor = boost::detail::variant::invoke_visitor&lt;boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt; &gt;, VoidPtrCV = const void*, NoBackupFlag = boost::variant&lt;unsigned int, float, std::basic_string&lt;char&gt;, bool, char, std::vector&lt;std::basic_string&lt;char&gt; &gt; &gt;::has_fallback_type_, typename Visitor::result_type = void, mpl_::false_ = mpl_::bool_&lt;false&gt;]’<br />
/usr/include/boost-1_46/boost/variant/variant.hpp:1776:13: instantiated from ‘static typename Visitor::result_type boost::variant&lt;T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19&gt;::internal_apply_visitor_impl(int, int, Visitor&amp;, VoidPtrCV) [with Visitor = boost::detail::variant::invoke_visitor&lt;boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt; &gt;, VoidPtrCV = const void*, T0_ = unsigned int, T1 = float, T2 = std::basic_string&lt;char&gt;, T3 = bool, T4 = char, T5 = std::vector&lt;std::basic_string&lt;char&gt; &gt;, T6 = boost::detail::variant::void_, T7 = boost::detail::variant::void_, T8 = boost::detail::variant::void_, T9 = boost::detail::variant::void_, T10 = boost::detail::variant::void_, T11 = boost::detail::variant::void_, T12 = boost::detail::variant::void_, T13 = boost::detail::variant::void_, T14 = boost::detail::variant::void_, T15 = boost::detail::variant::void_, T16 = boost::detail::variant::void_, T17 = boost::detail::variant::void_, T18 = boost::detail::variant::void_, T19 = boost::detail::variant::void_, typename Visitor::result_type = void]’<br />
/usr/include/boost-1_46/boost/variant/variant.hpp:1798:13: instantiated from ‘typename Visitor::result_type boost::variant&lt;T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19&gt;::internal_apply_visitor(Visitor&amp;) const [with Visitor = boost::detail::variant::invoke_visitor&lt;boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt; &gt;, T0_ = unsigned int, T1 = float, T2 = std::basic_string&lt;char&gt;, T3 = bool, T4 = char, T5 = std::vector&lt;std::basic_string&lt;char&gt; &gt;, T6 = boost::detail::variant::void_, T7 = boost::detail::variant::void_, T8 = boost::detail::variant::void_, T9 = boost::detail::variant::void_, T10 = boost::detail::variant::void_, T11 = boost::detail::variant::void_, T12 = boost::detail::variant::void_, T13 = boost::detail::variant::void_, T14 = boost::detail::variant::void_, T15 = boost::detail::variant::void_, T16 = boost::detail::variant::void_, T17 = boost::detail::variant::void_, T18 = boost::detail::variant::void_, T19 = boost::detail::variant::void_, typename Visitor::result_type = void]’<br />
/usr/include/boost-1_46/boost/variant/variant.hpp:1820:52: instantiated from ‘typename Visitor::result_type boost::variant&lt;T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19&gt;::apply_visitor(Visitor&amp;) const [with Visitor = boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt;, T0_ = unsigned int, T1 = float, T2 = std::basic_string&lt;char&gt;, T3 = bool, T4 = char, T5 = std::vector&lt;std::basic_string&lt;char&gt; &gt;, T6 = boost::detail::variant::void_, T7 = boost::detail::variant::void_, T8 = boost::detail::variant::void_, T9 = boost::detail::variant::void_, T10 = boost::detail::variant::void_, T11 = boost::detail::variant::void_, T12 = boost::detail::variant::void_, T13 = boost::detail::variant::void_, T14 = boost::detail::variant::void_, T15 = boost::detail::variant::void_, T16 = boost::detail::variant::void_, T17 = boost::detail::variant::void_, T18 = boost::detail::variant::void_, T19 = boost::detail::variant::void_, typename Visitor::result_type = void]’<br />
/usr/include/boost-1_46/boost/variant/detail/variant_io.hpp:88:5: instantiated from ‘std::basic_ostream&lt;_CharT, _Traits&gt;&amp; boost::operator&lt;&lt;(std::basic_ostream&lt;_CharT, _Traits&gt;&amp;, const boost::variant&lt;U0, U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11, U12, U13, U14, U15, U16, U17, U18, U19&gt;&amp;) [with E = char, T = std::char_traits&lt;char&gt;, U0 = unsigned int, U1 = float, U2 = std::basic_string&lt;char&gt;, U3 = bool, U4 = char, U5 = std::vector&lt;std::basic_string&lt;char&gt; &gt;, U6 = boost::detail::variant::void_, U7 = boost::detail::variant::void_, U8 = boost::detail::variant::void_, U9 = boost::detail::variant::void_, U10 = boost::detail::variant::void_, U11 = boost::detail::variant::void_, U12 = boost::detail::variant::void_, U13 = boost::detail::variant::void_, U14 = boost::detail::variant::void_, U15 = boost::detail::variant::void_, U16 = boost::detail::variant::void_, U17 = boost::detail::variant::void_, U18 = boost::detail::variant::void_, U19 = boost::detail::variant::void_]’<br />
bla.cpp:164:93: instantiated from here<br />
/usr/include/boost-1_46/boost/variant/detail/variant_io.hpp:64:9: error: no match for ‘operator&lt;&lt;’ in ‘((const boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt;*)this)-&gt;boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt;::out_ &lt;&lt; operand’</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/topic/299482/boost-variant-printer</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 06:12:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299482.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 12 Feb 2012 10:08:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::variant printer on Sun, 12 Feb 2012 10:08:06 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe noch eine Frage zum Template boost::variant.<br />
Ich habe folgenden Code geschrieben:</p>
<pre><code>typedef uint32_t int32;
typedef float float32;
typedef char char8;
typedef std::basic_string&lt;char8&gt; string;
typedef std::vector&lt;string&gt; List;

inline std::ostream&amp; operator&lt;&lt;(std::ostream &amp;ostream, const List &amp;list)
{
	return (ostream &lt;&lt; boost::algorithm::join&lt;List, string&gt;(list, &quot;:&quot;));
}

typedef boost::variant&lt;
int32,
float32,
string,
bool,
char8,
List
&gt; ValueBase;
</code></pre>
<p>Für den Typ &quot;List&quot; habe ich extra den &lt;&lt;-Operator überladen, damit ich ein Objekt des variant-Typs in cout ausgeben kann:</p>
<pre><code>std::cout &lt;&lt; ValueBase() &lt;&lt; std::endl;
</code></pre>
<p>Dieser Code erzeugt jedoch eine Menge Fehlermeldungen im Zusammenhang mit boost::detail::variant::printer und auch dem Typ List. So wie ich das sehe, verwendet boost::detail::variant::printer jedoch den stink normalen &lt;&lt;-Operator.<br />
Wieso funktioniert das dann nicht?</p>
<blockquote>
<p>/usr/include/boost-1_46/boost/variant/detail/variant_io.hpp: In member function ‘void boost::detail::variant::printer&lt;OStream&gt;::operator()(const T&amp;) const [with T = std::vector&lt;std::basic_string&lt;char&gt; &gt;, OStream = std::basic_ostream&lt;char&gt;]’:<br />
/usr/include/boost-1_46/boost/variant/variant.hpp:832:32: instantiated from ‘boost::detail::variant::invoke_visitor&lt;Visitor&gt;::result_type boost::detail::variant::invoke_visitor&lt;Visitor&gt;::internal_visit(T&amp;, int) [with T = const std::vector&lt;std::basic_string&lt;char&gt; &gt;, Visitor = boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt;, boost::detail::variant::invoke_visitor&lt;Visitor&gt;::result_type = void]’<br />
/usr/include/boost-1_46/boost/variant/detail/visitation_impl.hpp:130:9: instantiated from ‘typename Visitor::result_type boost::detail::variant::visitation_impl_invoke_impl(int, Visitor&amp;, VoidPtrCV, T*, mpl_::true_) [with Visitor = boost::detail::variant::invoke_visitor&lt;boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt; &gt;, VoidPtrCV = const void*, T = std::vector&lt;std::basic_string&lt;char&gt; &gt;, typename Visitor::result_type = void, mpl_::true_ = mpl_::bool_&lt;true&gt;]’<br />
/usr/include/boost-1_46/boost/variant/detail/visitation_impl.hpp:173:9: instantiated from ‘typename Visitor::result_type boost::detail::variant::visitation_impl_invoke(int, Visitor&amp;, VoidPtrCV, T*, NoBackupFlag, int) [with Visitor = boost::detail::variant::invoke_visitor&lt;boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt; &gt;, VoidPtrCV = const void*, T = std::vector&lt;std::basic_string&lt;char&gt; &gt;, NoBackupFlag = boost::variant&lt;unsigned int, float, std::basic_string&lt;char&gt;, bool, char, std::vector&lt;std::basic_string&lt;char&gt; &gt; &gt;::has_fallback_type_, typename Visitor::result_type = void]’<br />
/usr/include/boost-1_46/boost/variant/detail/visitation_impl.hpp:260:1: instantiated from ‘typename Visitor::result_type boost::detail::variant::visitation_impl(int, int, Visitor&amp;, VoidPtrCV, mpl_::false_, NoBackupFlag, Which*, step0*) [with Which = mpl_::int_&lt;0&gt;, step0 = boost::detail::variant::visitation_impl_step&lt;boost::mpl::l_iter&lt;boost::mpl::l_item&lt;mpl_::long_&lt;6l&gt;, unsigned int, boost::mpl::l_item&lt;mpl_::long_&lt;5l&gt;, float, boost::mpl::l_item&lt;mpl_::long_&lt;4l&gt;, std::basic_string&lt;char&gt;, boost::mpl::l_item&lt;mpl_::long_&lt;3l&gt;, bool, boost::mpl::l_item&lt;mpl_::long_&lt;2l&gt;, char, boost::mpl::l_item&lt;mpl_::long_&lt;1l&gt;, std::vector&lt;std::basic_string&lt;char&gt; &gt;, boost::mpl::l_end&gt; &gt; &gt; &gt; &gt; &gt; &gt;, boost::mpl::l_iter<a href="boost::mpl::l%5C_end" rel="nofollow">boost::mpl::l\_end</a> &gt;, Visitor = boost::detail::variant::invoke_visitor&lt;boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt; &gt;, VoidPtrCV = const void*, NoBackupFlag = boost::variant&lt;unsigned int, float, std::basic_string&lt;char&gt;, bool, char, std::vector&lt;std::basic_string&lt;char&gt; &gt; &gt;::has_fallback_type_, typename Visitor::result_type = void, mpl_::false_ = mpl_::bool_&lt;false&gt;]’<br />
/usr/include/boost-1_46/boost/variant/variant.hpp:1776:13: instantiated from ‘static typename Visitor::result_type boost::variant&lt;T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19&gt;::internal_apply_visitor_impl(int, int, Visitor&amp;, VoidPtrCV) [with Visitor = boost::detail::variant::invoke_visitor&lt;boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt; &gt;, VoidPtrCV = const void*, T0_ = unsigned int, T1 = float, T2 = std::basic_string&lt;char&gt;, T3 = bool, T4 = char, T5 = std::vector&lt;std::basic_string&lt;char&gt; &gt;, T6 = boost::detail::variant::void_, T7 = boost::detail::variant::void_, T8 = boost::detail::variant::void_, T9 = boost::detail::variant::void_, T10 = boost::detail::variant::void_, T11 = boost::detail::variant::void_, T12 = boost::detail::variant::void_, T13 = boost::detail::variant::void_, T14 = boost::detail::variant::void_, T15 = boost::detail::variant::void_, T16 = boost::detail::variant::void_, T17 = boost::detail::variant::void_, T18 = boost::detail::variant::void_, T19 = boost::detail::variant::void_, typename Visitor::result_type = void]’<br />
/usr/include/boost-1_46/boost/variant/variant.hpp:1798:13: instantiated from ‘typename Visitor::result_type boost::variant&lt;T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19&gt;::internal_apply_visitor(Visitor&amp;) const [with Visitor = boost::detail::variant::invoke_visitor&lt;boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt; &gt;, T0_ = unsigned int, T1 = float, T2 = std::basic_string&lt;char&gt;, T3 = bool, T4 = char, T5 = std::vector&lt;std::basic_string&lt;char&gt; &gt;, T6 = boost::detail::variant::void_, T7 = boost::detail::variant::void_, T8 = boost::detail::variant::void_, T9 = boost::detail::variant::void_, T10 = boost::detail::variant::void_, T11 = boost::detail::variant::void_, T12 = boost::detail::variant::void_, T13 = boost::detail::variant::void_, T14 = boost::detail::variant::void_, T15 = boost::detail::variant::void_, T16 = boost::detail::variant::void_, T17 = boost::detail::variant::void_, T18 = boost::detail::variant::void_, T19 = boost::detail::variant::void_, typename Visitor::result_type = void]’<br />
/usr/include/boost-1_46/boost/variant/variant.hpp:1820:52: instantiated from ‘typename Visitor::result_type boost::variant&lt;T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19&gt;::apply_visitor(Visitor&amp;) const [with Visitor = boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt;, T0_ = unsigned int, T1 = float, T2 = std::basic_string&lt;char&gt;, T3 = bool, T4 = char, T5 = std::vector&lt;std::basic_string&lt;char&gt; &gt;, T6 = boost::detail::variant::void_, T7 = boost::detail::variant::void_, T8 = boost::detail::variant::void_, T9 = boost::detail::variant::void_, T10 = boost::detail::variant::void_, T11 = boost::detail::variant::void_, T12 = boost::detail::variant::void_, T13 = boost::detail::variant::void_, T14 = boost::detail::variant::void_, T15 = boost::detail::variant::void_, T16 = boost::detail::variant::void_, T17 = boost::detail::variant::void_, T18 = boost::detail::variant::void_, T19 = boost::detail::variant::void_, typename Visitor::result_type = void]’<br />
/usr/include/boost-1_46/boost/variant/detail/variant_io.hpp:88:5: instantiated from ‘std::basic_ostream&lt;_CharT, _Traits&gt;&amp; boost::operator&lt;&lt;(std::basic_ostream&lt;_CharT, _Traits&gt;&amp;, const boost::variant&lt;U0, U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11, U12, U13, U14, U15, U16, U17, U18, U19&gt;&amp;) [with E = char, T = std::char_traits&lt;char&gt;, U0 = unsigned int, U1 = float, U2 = std::basic_string&lt;char&gt;, U3 = bool, U4 = char, U5 = std::vector&lt;std::basic_string&lt;char&gt; &gt;, U6 = boost::detail::variant::void_, U7 = boost::detail::variant::void_, U8 = boost::detail::variant::void_, U9 = boost::detail::variant::void_, U10 = boost::detail::variant::void_, U11 = boost::detail::variant::void_, U12 = boost::detail::variant::void_, U13 = boost::detail::variant::void_, U14 = boost::detail::variant::void_, U15 = boost::detail::variant::void_, U16 = boost::detail::variant::void_, U17 = boost::detail::variant::void_, U18 = boost::detail::variant::void_, U19 = boost::detail::variant::void_]’<br />
bla.cpp:164:93: instantiated from here<br />
/usr/include/boost-1_46/boost/variant/detail/variant_io.hpp:64:9: error: no match for ‘operator&lt;&lt;’ in ‘((const boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt;*)this)-&gt;boost::detail::variant::printer&lt;std::basic_ostream&lt;char&gt; &gt;::out_ &lt;&lt; operand’</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2180027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180027</guid><dc:creator><![CDATA[Barade]]></dc:creator><pubDate>Sun, 12 Feb 2012 10:08:06 GMT</pubDate></item><item><title><![CDATA[Reply to boost::variant printer on Sun, 12 Feb 2012 16:53:33 GMT]]></title><description><![CDATA[<p>Guck Dir mal boost::static_visitor&lt;..&gt; an. Hier gibts Bsp's:<br />
<a href="http://www.boost.org/doc/libs/1_48_0/doc/html/variant/tutorial.html#variant.tutorial.basic" rel="nofollow">http://www.boost.org/doc/libs/1_48_0/doc/html/variant/tutorial.html#variant.tutorial.basic</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180214</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 12 Feb 2012 16:53:33 GMT</pubDate></item><item><title><![CDATA[Reply to boost::variant printer on Sun, 12 Feb 2012 16:57:16 GMT]]></title><description><![CDATA[<p>Dass es mit einem static_visitor geht ist ja noch mal eine andere Sache. Die Frage war eher, wieso es nicht schon so funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180216</guid><dc:creator><![CDATA[Barade]]></dc:creator><pubDate>Sun, 12 Feb 2012 16:57:16 GMT</pubDate></item></channel></rss>