Boost C++ Libraries: Ticket #11012: chrono_io v2 fail to compile with boost::chrono::duration< boost::rational<int> > https://svn.boost.org/trac10/ticket/11012 <p> When using </p> <pre class="wiki"> boost::chrono::duration&lt; boost::rational&lt;int&gt; &gt; </pre><p> as duration type, chrono_io v2 fails to build with error </p> <pre class="wiki">include/boost/chrono/io/duration_units.hpp:136:91: error: invalid static_cast from type ‘boost::chrono::duration&lt;boost::rational&lt;int&gt; &gt;::rep {aka boost::rational&lt;int&gt;}’ to type ‘intmax_t {aka long int}’ </pre><p> while chrono_io v1 builds and works as expected. </p> <p> Here is the full compilation log for the attached example. </p> <pre class="wiki">$ gcc --version gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ make g++ -c -g -fPIC -Iinclude -I/home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include -o src/chrono_rational.o src/chrono_rational.cc In file included from /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/time_point_put.hpp:16:0, from /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/time_point_io.hpp:22, from /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/chrono_io.hpp:26, from src/chrono_rational.cc:5: /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp: In instantiation of ‘boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::put_value(boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type, std::ios_base&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;) const [with Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;; CharT = char; OutputIterator = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type = char]’: /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp:128:44: required from ‘boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::put(const boost::chrono::duration_units&lt;CharT&gt;&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type, std::ios_base&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;, const CharT*, const CharT*) const [with Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;; CharT = char; OutputIterator = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type = char]’ /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp:168:81: required from ‘boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::put(boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type, std::ios_base&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;) const [with Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;; CharT = char; OutputIterator = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type = char]’ /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_io.hpp:135:15: required from ‘std::basic_ostream&lt;_CharT, _Traits&gt;&amp; boost::chrono::operator&lt;&lt;(std::basic_ostream&lt;_CharT, _Traits&gt;&amp;, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;) [with CharT = char; Traits = std::char_traits&lt;char&gt;; Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;]’ src/chrono_rational.cc:11:18: required from here /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp:191:46: error: invalid static_cast from type ‘boost::chrono::duration&lt;boost::rational&lt;int&gt; &gt;::rep {aka boost::rational&lt;int&gt;}’ to type ‘long int’ static_cast&lt;long int&gt; (d.count())); ^ In file included from /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp:15:0, from /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/time_point_put.hpp:16, from /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/time_point_io.hpp:22, from /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/chrono_io.hpp:26, from src/chrono_rational.cc:5: /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_units.hpp: In instantiation of ‘boost::chrono::duration_units&lt;CharT&gt;::string_type boost::chrono::duration_units&lt;CharT&gt;::get_unit(boost::chrono::duration_style, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;) const [with Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;; CharT = char; boost::chrono::duration_units&lt;CharT&gt;::string_type = std::basic_string&lt;char&gt;]’: /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp:230:70: required from ‘boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::put_unit(const boost::chrono::duration_units&lt;CharT&gt;&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type, std::ios_base&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;) const [with Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;; CharT = char; OutputIterator = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type = char]’ /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp:133:56: required from ‘boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::put(const boost::chrono::duration_units&lt;CharT&gt;&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type, std::ios_base&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;, const CharT*, const CharT*) const [with Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;; CharT = char; OutputIterator = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type = char]’ /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp:168:81: required from ‘boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::put(boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type, std::ios_base&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;) const [with Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;; CharT = char; OutputIterator = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type = char]’ /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_io.hpp:135:15: required from ‘std::basic_ostream&lt;_CharT, _Traits&gt;&amp; boost::chrono::operator&lt;&lt;(std::basic_ostream&lt;_CharT, _Traits&gt;&amp;, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;) [with CharT = char; Traits = std::char_traits&lt;char&gt;; Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;]’ src/chrono_rational.cc:11:18: required from here /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_units.hpp:127:87: error: invalid static_cast from type ‘boost::chrono::duration&lt;boost::rational&lt;int&gt; &gt;::rep {aka boost::rational&lt;int&gt;}’ to type ‘intmax_t {aka long int}’ return do_get_unit(style, rt_ratio(Period()), static_cast&lt;intmax_t&gt;(d.count())); ^ /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_units.hpp: In instantiation of ‘boost::chrono::duration_units&lt;CharT&gt;::string_type boost::chrono::duration_units&lt;CharT&gt;::get_n_d_unit(boost::chrono::duration_style, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;) const [with Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;; CharT = char; boost::chrono::duration_units&lt;CharT&gt;::string_type = std::basic_string&lt;char&gt;]’: /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp:238:74: required from ‘boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::put_unit(const boost::chrono::duration_units&lt;CharT&gt;&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type, std::ios_base&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;) const [with Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;; CharT = char; OutputIterator = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type = char]’ /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp:133:56: required from ‘boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::put(const boost::chrono::duration_units&lt;CharT&gt;&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type, std::ios_base&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;, const CharT*, const CharT*) const [with Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;; CharT = char; OutputIterator = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type = char]’ /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp:168:81: required from ‘boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::put(boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type, std::ios_base&amp;, boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;) const [with Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;; CharT = char; OutputIterator = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::iter_type = std::ostreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt;; boost::chrono::duration_put&lt;CharT, OutputIterator&gt;::char_type = char]’ /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_io.hpp:135:15: required from ‘std::basic_ostream&lt;_CharT, _Traits&gt;&amp; boost::chrono::operator&lt;&lt;(std::basic_ostream&lt;_CharT, _Traits&gt;&amp;, const boost::chrono::duration&lt;Rep2, Period2&gt;&amp;) [with CharT = char; Traits = std::char_traits&lt;char&gt;; Rep = boost::rational&lt;int&gt;; Period = boost::ratio&lt;1l&gt;]’ src/chrono_rational.cc:11:18: required from here /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_units.hpp:136:91: error: invalid static_cast from type ‘boost::chrono::duration&lt;boost::rational&lt;int&gt; &gt;::rep {aka boost::rational&lt;int&gt;}’ to type ‘intmax_t {aka long int}’ return do_get_n_d_unit(style, rt_ratio(Period()), static_cast&lt;intmax_t&gt;(d.count())); ^ make: *** [src/chrono_rational.o] Error 1 </pre><p> }}} </p> en-us Boost C++ Libraries /htdocs/site/boost.png https://svn.boost.org/trac10/ticket/11012 Trac 1.4.3 Sébastien Barthélémy <barthelemy@…> Tue, 10 Feb 2015 15:52:57 GMT attachment set https://svn.boost.org/trac10/ticket/11012 https://svn.boost.org/trac10/ticket/11012 <ul> <li><strong>attachment</strong> → <span class="trac-field-new">chrono_rational.tgz</span> </li> </ul> <p> unbuildable example </p> Ticket viboes Fri, 13 Feb 2015 18:27:39 GMT status, component changed; owner set https://svn.boost.org/trac10/ticket/11012#comment:1 https://svn.boost.org/trac10/ticket/11012#comment:1 <ul> <li><strong>owner</strong> set to <span class="trac-author">viboes</span> </li> <li><strong>status</strong> <span class="trac-field-old">new</span> → <span class="trac-field-new">assigned</span> </li> <li><strong>component</strong> <span class="trac-field-old">None</span> → <span class="trac-field-new">chrono</span> </li> </ul> <p> Why do you want the following to compile? </p> <pre class="wiki"> boost::chrono::duration&lt; boost::rational&lt;int&gt; &gt; </pre><p> duration expects an integral type. </p> Ticket Sébastien Barthélémy <barthelemy@…> Mon, 16 Feb 2015 08:26:50 GMT <link>https://svn.boost.org/trac10/ticket/11012#comment:2 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/11012#comment:2</guid> <description> <p> Hello Vicente, </p> <p> thank you for your answer. </p> <p> Replying to <a class="ticket" href="https://svn.boost.org/trac10/ticket/11012#comment:1" title="Comment 1">viboes</a>: </p> <blockquote class="citation"> <p> Why do you want the following to compile? </p> <pre class="wiki"> boost::chrono::duration&lt; boost::rational&lt;int&gt; &gt; </pre></blockquote> <p> Well, this specific line does compile, and even the io part did compile under version 1. The compilation only fails with io version 2. </p> <p> I expected the compilation not to break between versions. </p> <p> Moreover, the page <code>en.cppreference.com/w/cpp/chrono/duration</code> documents rep as: </p> <blockquote class="citation"> <p> Rep, an arithmetic type representing the number of ticks </p> </blockquote> <p> I'm not sure what "arithmetic type" precisely means in this context, but using a rational type, which supports the arithmetic operations, seemed legit (and does actually work, except for io version 2). </p> <p> Note that I just discovered this trait class: <code>en.cppreference.com/w/cpp/types/is_arithmetic</code>, maybe there is a precise definition of what an arithmetic type is somewhere in the standard. </p> <p> Replying to <a class="ticket" href="https://svn.boost.org/trac10/ticket/11012#comment:1" title="Comment 1">viboes</a>: </p> <blockquote class="citation"> <p> duration expects an integral type. </p> </blockquote> <p> That seems untrue: there is explicit support for floating point numbers. </p> <p> I guess the crux here is to first understand whether or not std::chrono supports boost::rational-like types as Rep, and then support the same types for the io part. </p> </description> <category>Ticket</category> </item> <item> <dc:creator>viboes</dc:creator> <pubDate>Mon, 16 Feb 2015 14:55:36 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/11012#comment:3 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/11012#comment:3</guid> <description> <p> My bad. You are right and std::chrono should support boost::rational. </p> <p> As you mention Boost.Chrono IO V2 doesn't supports it. </p> <p> V1 needed just that the Rep supports streaming </p> <pre class="wiki"> return os &lt;&lt; d.count() &lt;&lt; ' ' &lt;&lt; f.template name&lt;Period&gt;(d.count()); </pre><p> V2 request num_put facet. </p> <pre class="wiki"> return std::use_facet&lt;std::num_put&lt;CharT, iter_type&gt; &gt;(ios.getloc()).put(s, ios, fill, static_cast&lt;long int&gt; (d.count())); //d.count()); </pre><p> When I comment/uncomment the previous lines I got an ambiguous call to put. This was a bug, and when I replace your example by </p> <pre class="wiki"> typedef boost::chrono::duration&lt; float &gt; RationalSeconds; RationalSeconds d(0.5); std::cout &lt;&lt; d &lt;&lt; std::endl; </pre><p> The decimal part is truncated. I get </p> <pre class="wiki">0 seconds </pre><p> instead of </p> <pre class="wiki">0.5 seconds </pre><p> I have added a trait that promotes int to long int </p> <pre class="wiki"> namespace detail { template &lt;class T&gt; struct propagate { typedef T type; }; template &lt;&gt; struct propagate&lt;boost::int_least32_t&gt; { typedef boost::int_least64_t type; }; } </pre><p> and used it instead of the cast </p> <pre class="wiki"> static_cast&lt;long int&gt; (d.count())); </pre><p> as follows </p> <pre class="wiki"> static_cast&lt;typename detail::propagate&lt;Rep&gt;::type&gt; (d.count())); </pre><p> This will however not take in account boost::rational as a valid representation. </p> <p> There are other places where I have added more constraints to the representation. </p> <pre class="wiki"> return do_get_unit(style, rt_ratio(Period()), static_cast&lt;intmax_t&gt;(d.count())); </pre><p> I 'll need to rethink how V2 can take care of IO of Rep not supported by the facets num_get/num_put and many other issues. :( </p> </description> <category>Ticket</category> </item> <item> <dc:creator>viboes</dc:creator> <pubDate>Mon, 16 Feb 2015 14:58:32 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/11012#comment:4 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/11012#comment:4</guid> <description> <p> <a class="ext-link" href="https://github.com/boostorg/chrono/commit/300c0c69631de7dcc9e555bdc8ff217d9a25bb88"><span class="icon">​</span>https://github.com/boostorg/chrono/commit/300c0c69631de7dcc9e555bdc8ff217d9a25bb88</a> </p> </description> <category>Ticket</category> </item> <item> <author>Sébastien Barthélémy <barthelemy@…></author> <pubDate>Mon, 16 Feb 2015 16:54:01 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/11012#comment:5 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/11012#comment:5</guid> <description> <p> Vincente, </p> <p> many thanks for your work on chrono (I should have said that first) </p> <p> Replying to <a class="ticket" href="https://svn.boost.org/trac10/ticket/11012#comment:3" title="Comment 3">viboes</a>: </p> <blockquote class="citation"> <p> I 'll need to rethink how V2 can take care of IO of Rep not supported by the facets num_get/num_put and many other issues. :( </p> </blockquote> <p> yes, good luck for that. </p> <p> Cheers </p> </description> <category>Ticket</category> </item> <item> <dc:creator>viboes</dc:creator> <pubDate>Wed, 18 Feb 2015 18:12:54 GMT</pubDate> <title>milestone changed https://svn.boost.org/trac10/ticket/11012#comment:6 https://svn.boost.org/trac10/ticket/11012#comment:6 <ul> <li><strong>milestone</strong> <span class="trac-field-old">To Be Determined</span> → <span class="trac-field-new">Boost 1.58.0</span> </li> </ul> <p> You are welcome. </p> <p> I have found a workaround. While not completely satisfactory from the design point of view, it seems to work. </p> <p> Please, could you take a look at <a class="ext-link" href="https://github.com/boostorg/chrono/commit/83b881fad4ecb539c63357c3482c95daf2ca7388"><span class="icon">​</span>https://github.com/boostorg/chrono/commit/83b881fad4ecb539c63357c3482c95daf2ca7388</a> </p> Ticket viboes Wed, 18 Feb 2015 18:30:44 GMT <link>https://svn.boost.org/trac10/ticket/11012#comment:7 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/11012#comment:7</guid> <description> <p> While the last commit works for stream inserter (&lt;&lt;), I don't have yet a clear idea on how to take care of stream extractor (&gt;&gt;). </p> </description> <category>Ticket</category> </item> <item> <author>Sébastien Barthélémy <barthelemy@…></author> <pubDate>Wed, 18 Feb 2015 21:35:16 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/11012#comment:8 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/11012#comment:8</guid> <description> <p> Thank you for the patch </p> <p> Replying to <a class="ticket" href="https://svn.boost.org/trac10/ticket/11012#comment:6" title="Comment 6">viboes</a>: </p> <blockquote class="citation"> <p> Please, could you take a look at [...] </p> </blockquote> <p> I commented there. </p> </description> <category>Ticket</category> </item> <item> <author>Sébastien Barthélémy <barthelemy@…></author> <pubDate>Wed, 18 Feb 2015 21:36:47 GMT</pubDate> <title/> <link>https://svn.boost.org/trac10/ticket/11012#comment:8 </link> <guid isPermaLink="false">https://svn.boost.org/trac10/ticket/11012#comment:8</guid> <description> <p> Replying to <a class="ticket" href="https://svn.boost.org/trac10/ticket/11012#comment:6" title="Comment 6">viboes</a>: </p> <blockquote class="citation"> <p> Please, could you take a look at <a href="https://svn.boost.org/trac10/ticket">..</a> </p> </blockquote> <p> I commented there. Cheers </p> </description> <category>Ticket</category> </item> <item> <dc:creator>viboes</dc:creator> <pubDate>Mon, 09 Mar 2015 07:25:26 GMT</pubDate> <title>status changed; resolution set https://svn.boost.org/trac10/ticket/11012#comment:9 https://svn.boost.org/trac10/ticket/11012#comment:9 <ul> <li><strong>status</strong> <span class="trac-field-old">assigned</span> → <span class="trac-field-new">closed</span> </li> <li><strong>resolution</strong> → <span class="trac-field-new">fixed</span> </li> </ul> <p> I will close this issue, even if the design is not clean. </p> Ticket