[Boost-bugs] [Boost C++ Libraries] #11012: chrono_io v2 fail to compile with boost::chrono::duration< boost::rational<int> >

Subject: [Boost-bugs] [Boost C++ Libraries] #11012: chrono_io v2 fail to compile with boost::chrono::duration< boost::rational<int> >
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2015-02-10 15:51:21


#11012: chrono_io v2 fail to compile with boost::chrono::duration<
boost::rational<int> >
-------------------------------------------------+-------------------------
 Reporter: Sébastien Barthélémy <barthelemy@…> | Type: Bugs
   Status: new | Milestone: To Be
Component: None | Determined
 Severity: Problem | Version: Boost
                                                 | 1.57.0
                                                 | Keywords:
-------------------------------------------------+-------------------------
 When using

 {{{
  boost::chrono::duration< boost::rational<int> >
 }}}

 as duration type, chrono_io v2 fails to build with error
 {{{
 include/boost/chrono/io/duration_units.hpp:136:91: error: invalid
 static_cast from type ‘boost::chrono::duration<boost::rational<int> >::rep
 {aka boost::rational<int>}’ to type ‘intmax_t {aka long int}’
 }}}

 while chrono_io v1 builds and works as expected.

 Here is the full compilation log for the attached example.
 {{{
 $ 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<CharT,
 OutputIterator>::iter_type boost::chrono::duration_put<CharT,
 OutputIterator>::put_value(boost::chrono::duration_put<CharT,
 OutputIterator>::iter_type, std::ios_base&,
 boost::chrono::duration_put<CharT, OutputIterator>::char_type, const
 boost::chrono::duration<Rep2, Period2>&) const [with Rep =
 boost::rational<int>; Period = boost::ratio<1l>; CharT = char;
 OutputIterator = std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::iter_type =
 std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::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<CharT,
 OutputIterator>::iter_type boost::chrono::duration_put<CharT,
 OutputIterator>::put(const boost::chrono::duration_units<CharT>&,
 boost::chrono::duration_put<CharT, OutputIterator>::iter_type,
 std::ios_base&, boost::chrono::duration_put<CharT,
 OutputIterator>::char_type, const boost::chrono::duration<Rep2, Period2>&,
 const CharT*, const CharT*) const [with Rep = boost::rational<int>; Period
 = boost::ratio<1l>; CharT = char; OutputIterator =
 std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::iter_type =
 std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::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<CharT,
 OutputIterator>::iter_type boost::chrono::duration_put<CharT,
 OutputIterator>::put(boost::chrono::duration_put<CharT,
 OutputIterator>::iter_type, std::ios_base&,
 boost::chrono::duration_put<CharT, OutputIterator>::char_type, const
 boost::chrono::duration<Rep2, Period2>&) const [with Rep =
 boost::rational<int>; Period = boost::ratio<1l>; CharT = char;
 OutputIterator = std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::iter_type =
 std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::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<_CharT, _Traits>&
 boost::chrono::operator<<(std::basic_ostream<_CharT, _Traits>&, const
 boost::chrono::duration<Rep2, Period2>&) [with CharT = char; Traits =
 std::char_traits<char>; Rep = boost::rational<int>; Period =
 boost::ratio<1l>]’
 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<boost::rational<int> >::rep {aka
 boost::rational<int>}’ to type ‘long int’
              static_cast<long int> (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<CharT>::string_type
 boost::chrono::duration_units<CharT>::get_unit(boost::chrono::duration_style,
 const boost::chrono::duration<Rep2, Period2>&) const [with Rep =
 boost::rational<int>; Period = boost::ratio<1l>; CharT = char;
 boost::chrono::duration_units<CharT>::string_type =
 std::basic_string<char>]’:
 /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp:230:70:
 required from ‘boost::chrono::duration_put<CharT,
 OutputIterator>::iter_type boost::chrono::duration_put<CharT,
 OutputIterator>::put_unit(const boost::chrono::duration_units<CharT>&,
 boost::chrono::duration_put<CharT, OutputIterator>::iter_type,
 std::ios_base&, boost::chrono::duration_put<CharT,
 OutputIterator>::char_type, const boost::chrono::duration<Rep2, Period2>&)
 const [with Rep = boost::rational<int>; Period = boost::ratio<1l>; CharT =
 char; OutputIterator = std::ostreambuf_iterator<char,
 std::char_traits<char> >; boost::chrono::duration_put<CharT,
 OutputIterator>::iter_type = std::ostreambuf_iterator<char,
 std::char_traits<char> >; boost::chrono::duration_put<CharT,
 OutputIterator>::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<CharT,
 OutputIterator>::iter_type boost::chrono::duration_put<CharT,
 OutputIterator>::put(const boost::chrono::duration_units<CharT>&,
 boost::chrono::duration_put<CharT, OutputIterator>::iter_type,
 std::ios_base&, boost::chrono::duration_put<CharT,
 OutputIterator>::char_type, const boost::chrono::duration<Rep2, Period2>&,
 const CharT*, const CharT*) const [with Rep = boost::rational<int>; Period
 = boost::ratio<1l>; CharT = char; OutputIterator =
 std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::iter_type =
 std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::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<CharT,
 OutputIterator>::iter_type boost::chrono::duration_put<CharT,
 OutputIterator>::put(boost::chrono::duration_put<CharT,
 OutputIterator>::iter_type, std::ios_base&,
 boost::chrono::duration_put<CharT, OutputIterator>::char_type, const
 boost::chrono::duration<Rep2, Period2>&) const [with Rep =
 boost::rational<int>; Period = boost::ratio<1l>; CharT = char;
 OutputIterator = std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::iter_type =
 std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::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<_CharT, _Traits>&
 boost::chrono::operator<<(std::basic_ostream<_CharT, _Traits>&, const
 boost::chrono::duration<Rep2, Period2>&) [with CharT = char; Traits =
 std::char_traits<char>; Rep = boost::rational<int>; Period =
 boost::ratio<1l>]’
 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<boost::rational<int> >::rep {aka
 boost::rational<int>}’ to type ‘intmax_t {aka long int}’
          return do_get_unit(style, rt_ratio(Period()),
 static_cast<intmax_t>(d.count()));

 ^
 /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_units.hpp:
 In instantiation of ‘boost::chrono::duration_units<CharT>::string_type
 boost::chrono::duration_units<CharT>::get_n_d_unit(boost::chrono::duration_style,
 const boost::chrono::duration<Rep2, Period2>&) const [with Rep =
 boost::rational<int>; Period = boost::ratio<1l>; CharT = char;
 boost::chrono::duration_units<CharT>::string_type =
 std::basic_string<char>]’:
 /home/sbarthelemy/.local/share/qi/toolchains/linux64/boost/include/boost/chrono/io/duration_put.hpp:238:74:
 required from ‘boost::chrono::duration_put<CharT,
 OutputIterator>::iter_type boost::chrono::duration_put<CharT,
 OutputIterator>::put_unit(const boost::chrono::duration_units<CharT>&,
 boost::chrono::duration_put<CharT, OutputIterator>::iter_type,
 std::ios_base&, boost::chrono::duration_put<CharT,
 OutputIterator>::char_type, const boost::chrono::duration<Rep2, Period2>&)
 const [with Rep = boost::rational<int>; Period = boost::ratio<1l>; CharT =
 char; OutputIterator = std::ostreambuf_iterator<char,
 std::char_traits<char> >; boost::chrono::duration_put<CharT,
 OutputIterator>::iter_type = std::ostreambuf_iterator<char,
 std::char_traits<char> >; boost::chrono::duration_put<CharT,
 OutputIterator>::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<CharT,
 OutputIterator>::iter_type boost::chrono::duration_put<CharT,
 OutputIterator>::put(const boost::chrono::duration_units<CharT>&,
 boost::chrono::duration_put<CharT, OutputIterator>::iter_type,
 std::ios_base&, boost::chrono::duration_put<CharT,
 OutputIterator>::char_type, const boost::chrono::duration<Rep2, Period2>&,
 const CharT*, const CharT*) const [with Rep = boost::rational<int>; Period
 = boost::ratio<1l>; CharT = char; OutputIterator =
 std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::iter_type =
 std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::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<CharT,
 OutputIterator>::iter_type boost::chrono::duration_put<CharT,
 OutputIterator>::put(boost::chrono::duration_put<CharT,
 OutputIterator>::iter_type, std::ios_base&,
 boost::chrono::duration_put<CharT, OutputIterator>::char_type, const
 boost::chrono::duration<Rep2, Period2>&) const [with Rep =
 boost::rational<int>; Period = boost::ratio<1l>; CharT = char;
 OutputIterator = std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::iter_type =
 std::ostreambuf_iterator<char, std::char_traits<char> >;
 boost::chrono::duration_put<CharT, OutputIterator>::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<_CharT, _Traits>&
 boost::chrono::operator<<(std::basic_ostream<_CharT, _Traits>&, const
 boost::chrono::duration<Rep2, Period2>&) [with CharT = char; Traits =
 std::char_traits<char>; Rep = boost::rational<int>; Period =
 boost::ratio<1l>]’
 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<boost::rational<int> >::rep {aka
 boost::rational<int>}’ to type ‘intmax_t {aka long int}’
          return do_get_n_d_unit(style, rt_ratio(Period()),
 static_cast<intmax_t>(d.count()));
 ^
 make: *** [src/chrono_rational.o] Error 1
 }}}
 }}}

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/11012>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:17 UTC