<?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, boost::serialization, boost::asio] Frage an die boost-Experten.]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich hab einen rekursiven boost::variant typ definiert der wie folgt aussieht:</p>
<pre><code>typedef boost::make_recursive_variant&lt;bool,
                                      int,
                                      double,
                                      std::string,
                                      std::vector&lt; boost::recursive_variant_ &gt;,
                                      std::map&lt;std::string, boost::recursive_variant_&gt;,
                                      TGrey8Image,
                                      TRgbImage,
                                      TRgbaImage
                                      &gt;::type TVType;
</code></pre>
<p>Objekte dieses Typs würde ich nun gern in ein Message-Objekt packen, serialisieren und per boost::asio über eine tcp Verbindung schicken.<br />
Das Serialisieren und Deserialisieren in ein binary_archive als Datei oder std::stringstream funktioniert problemlos.</p>
<p>Das Problem tritt auf wenn ich das variant Objekt auf der Gegenseite der tcp-Verbindung deserialisieren will. Dann bekomm ich ne Laufzeit-Assertion:</p>
<pre><code>testSerialization: /usr/include/boost/variant/detail/visitation_impl.hpp:203:
typename Visitor::result_type boost::detail::variant::visitation_impl(int,
int, Visitor&amp;, VPCV, mpl_::true_, NBF, W*, S*) [with W = mpl_::int_&lt;20&gt;, S
= boost::detail::variant::visitation_impl_step&lt;boost::mpl::l_iter
&lt;boost::mpl::l_end&gt;, boost::mpl::l_iter&lt;boost::mpl::l_end&gt; &gt;, Visitor =
boost::detail::variant::invoke_visitor&lt;boost::detail::variant::direct_assigner
&lt;std::map&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt;,
boost::variant&lt;boost::detail::variant::recursive_flag&lt;bool&gt;, int, double,
std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
std::vector&lt;boost::recursive_variant_,
std::allocator&lt;boost::recursive_variant_&gt; &gt;,
std::map&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt;, boost::recursive_variant_,
std::less&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt; &gt;, std::allocator&lt;std::pair&lt;const
std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
boost::recursive_variant_&gt; &gt; &gt;, CIS::Image2d&lt;unsigned char&gt;,
CIS::Image2d&lt;CIS::RGB&gt;, CIS::Image2d&lt;CIS::RGBA&gt;,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_&gt;, std::less&lt;std::basic_string&lt;char,
std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt;,
std::allocator&lt;std::pair&lt;const std::basic_string&lt;char,
std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
boost::variant&lt;boost::detail::variant::recursive_flag&lt;bool&gt;, int, double,
std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
std::vector&lt;boost::recursive_variant_,
std::allocator&lt;boost::recursive_variant_&gt; &gt;,
std::map&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt;, boost::recursive_variant_,
std::less&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt; &gt;, std::allocator&lt;std::pair&lt;const
std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
boost::recursive_variant_&gt; &gt; &gt;, CIS::Image2d&lt;unsigned char&gt;,
CIS::Image2d&lt;CIS::RGB&gt;, CIS::Image2d&lt;CIS::RGBA&gt;,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_&gt; &gt; &gt; &gt; &gt; &gt;, VPCV = void*, NBF =
boost::variant&lt;boost::detail::variant::recursive_flag&lt;bool&gt;, int, double,
std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
std::vector&lt;boost::recursive_variant_,
std::allocator&lt;boost::recursive_variant_&gt; &gt;,
std::map&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt;, boost::recursive_variant_,
std::less&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt; &gt;, std::allocator&lt;std::pair&lt;const
std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
boost::recursive_variant_&gt; &gt; &gt;, CIS::Image2d&lt;unsigned char&gt;,
CIS::Image2d&lt;CIS::RGB&gt;, CIS::Image2d&lt;CIS::RGBA&gt;,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_&gt;::has_fallback_type_]: Assertion `false'
failed.
</code></pre>
<p>Was ich bisher versucht hab:</p>
<ul>
<li>Google bemüht -&gt; nix gefunden.</li>
<li>Nicht rekursiven variant-typ verschicken -&gt; geht nicht</li>
<li>Variant-typ ganz aus dem Message Objekt rauslassen -&gt; <strong>geht</strong></li>
<li>Anderen compiler verwenden -&gt; geht nicht</li>
<li>CVS-Boost verwenden und neu bauen<br />
-&gt; geht nicht auf Ubuntu 6.10 g++-4.1.2<br />
-&gt; <strong>geht</strong> auf Debian testing g++-4.1.2 <strong>?????</strong></li>
<li>Hab mich an die boost-mailingliste gewandt aber leider keine Hinweise<br />
erhalten.</li>
<li>Assertion auskommentieren -&gt; Segfault</li>
</ul>
<p>Irgendwie riecht das alles nach einem Bug in boost oder Compiler bug. Wenn ich mir die Stelle anschau wo die Assertion steht sieht das so aus als ob der <em>apply_visitor</em> nicht ausgerollt wurde.</p>
<p>Ich hoffe sehr dass mir vll. jemand weiterhelfen kann. Ich kann auch den ganzen Netzwerkcode posten falls es weiterhilft sind nur 300loc.</p>
<p>Gruß,<br />
Falco</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/177205/boost-variant-boost-serialization-boost-asio-frage-an-die-boost-experten</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 21:11:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/177205.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Mar 2007 08:49:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [boost::variant, boost::serialization, boost::asio] Frage an die boost-Experten. on Thu, 29 Mar 2007 08:49:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich hab einen rekursiven boost::variant typ definiert der wie folgt aussieht:</p>
<pre><code>typedef boost::make_recursive_variant&lt;bool,
                                      int,
                                      double,
                                      std::string,
                                      std::vector&lt; boost::recursive_variant_ &gt;,
                                      std::map&lt;std::string, boost::recursive_variant_&gt;,
                                      TGrey8Image,
                                      TRgbImage,
                                      TRgbaImage
                                      &gt;::type TVType;
</code></pre>
<p>Objekte dieses Typs würde ich nun gern in ein Message-Objekt packen, serialisieren und per boost::asio über eine tcp Verbindung schicken.<br />
Das Serialisieren und Deserialisieren in ein binary_archive als Datei oder std::stringstream funktioniert problemlos.</p>
<p>Das Problem tritt auf wenn ich das variant Objekt auf der Gegenseite der tcp-Verbindung deserialisieren will. Dann bekomm ich ne Laufzeit-Assertion:</p>
<pre><code>testSerialization: /usr/include/boost/variant/detail/visitation_impl.hpp:203:
typename Visitor::result_type boost::detail::variant::visitation_impl(int,
int, Visitor&amp;, VPCV, mpl_::true_, NBF, W*, S*) [with W = mpl_::int_&lt;20&gt;, S
= boost::detail::variant::visitation_impl_step&lt;boost::mpl::l_iter
&lt;boost::mpl::l_end&gt;, boost::mpl::l_iter&lt;boost::mpl::l_end&gt; &gt;, Visitor =
boost::detail::variant::invoke_visitor&lt;boost::detail::variant::direct_assigner
&lt;std::map&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt;,
boost::variant&lt;boost::detail::variant::recursive_flag&lt;bool&gt;, int, double,
std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
std::vector&lt;boost::recursive_variant_,
std::allocator&lt;boost::recursive_variant_&gt; &gt;,
std::map&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt;, boost::recursive_variant_,
std::less&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt; &gt;, std::allocator&lt;std::pair&lt;const
std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
boost::recursive_variant_&gt; &gt; &gt;, CIS::Image2d&lt;unsigned char&gt;,
CIS::Image2d&lt;CIS::RGB&gt;, CIS::Image2d&lt;CIS::RGBA&gt;,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_&gt;, std::less&lt;std::basic_string&lt;char,
std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt;,
std::allocator&lt;std::pair&lt;const std::basic_string&lt;char,
std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
boost::variant&lt;boost::detail::variant::recursive_flag&lt;bool&gt;, int, double,
std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
std::vector&lt;boost::recursive_variant_,
std::allocator&lt;boost::recursive_variant_&gt; &gt;,
std::map&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt;, boost::recursive_variant_,
std::less&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt; &gt;, std::allocator&lt;std::pair&lt;const
std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
boost::recursive_variant_&gt; &gt; &gt;, CIS::Image2d&lt;unsigned char&gt;,
CIS::Image2d&lt;CIS::RGB&gt;, CIS::Image2d&lt;CIS::RGBA&gt;,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_&gt; &gt; &gt; &gt; &gt; &gt;, VPCV = void*, NBF =
boost::variant&lt;boost::detail::variant::recursive_flag&lt;bool&gt;, int, double,
std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
std::vector&lt;boost::recursive_variant_,
std::allocator&lt;boost::recursive_variant_&gt; &gt;,
std::map&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt;, boost::recursive_variant_,
std::less&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;,
std::allocator&lt;char&gt; &gt; &gt;, std::allocator&lt;std::pair&lt;const
std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;,
boost::recursive_variant_&gt; &gt; &gt;, CIS::Image2d&lt;unsigned char&gt;,
CIS::Image2d&lt;CIS::RGB&gt;, CIS::Image2d&lt;CIS::RGBA&gt;,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_&gt;::has_fallback_type_]: Assertion `false'
failed.
</code></pre>
<p>Was ich bisher versucht hab:</p>
<ul>
<li>Google bemüht -&gt; nix gefunden.</li>
<li>Nicht rekursiven variant-typ verschicken -&gt; geht nicht</li>
<li>Variant-typ ganz aus dem Message Objekt rauslassen -&gt; <strong>geht</strong></li>
<li>Anderen compiler verwenden -&gt; geht nicht</li>
<li>CVS-Boost verwenden und neu bauen<br />
-&gt; geht nicht auf Ubuntu 6.10 g++-4.1.2<br />
-&gt; <strong>geht</strong> auf Debian testing g++-4.1.2 <strong>?????</strong></li>
<li>Hab mich an die boost-mailingliste gewandt aber leider keine Hinweise<br />
erhalten.</li>
<li>Assertion auskommentieren -&gt; Segfault</li>
</ul>
<p>Irgendwie riecht das alles nach einem Bug in boost oder Compiler bug. Wenn ich mir die Stelle anschau wo die Assertion steht sieht das so aus als ob der <em>apply_visitor</em> nicht ausgerollt wurde.</p>
<p>Ich hoffe sehr dass mir vll. jemand weiterhelfen kann. Ich kann auch den ganzen Netzwerkcode posten falls es weiterhilft sind nur 300loc.</p>
<p>Gruß,<br />
Falco</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1255150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1255150</guid><dc:creator><![CDATA[__HIRSCH_H__]]></dc:creator><pubDate>Thu, 29 Mar 2007 08:49:37 GMT</pubDate></item></channel></rss>