[Boost-bugs] [Boost C++ Libraries] #10354: inconsistent declaration of do_length in boost/detail/utf8_codecvt_facet.hpp due to missing BOOST_WORKAROUND

Subject: [Boost-bugs] [Boost C++ Libraries] #10354: inconsistent declaration of do_length in boost/detail/utf8_codecvt_facet.hpp due to missing BOOST_WORKAROUND
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2014-08-13 21:16:29


#10354: inconsistent declaration of do_length in
boost/detail/utf8_codecvt_facet.hpp due to missing BOOST_WORKAROUND
---------------------------------------------+------------------------
 Reporter: Juan Alday <alday.boost.trac@…> | Owner: bemandawes
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: filesystem
  Version: Boost 1.56.0 | Severity: Problem
 Keywords: |
---------------------------------------------+------------------------
 First, the output when trying to build boost in AIX using xlC

   xlC_r -c -DBOOST_ALL_NO_LIB=1 -DNDEBUG -qcpluscmt -O3 -qstrict -q64
 -qfuncsect -qeh -qrtti -I"." -o
 "bin.v2/libs/filesystem/build/vacpp-11/release/... utf8_codecvt_facet.o"
 "libs/filesystem/src/utf8_codecvt_facet.cpp"

   "./boost/detail/utf8_codecvt_facet.ipp", line 173.5: 1540-0400 (S)
 "boost::archive::detail::utf8_codecvt_facet::do_length(const
 std::mbstate_t &, const char *, const char *, std::size_t) const" has a
 conflicting declaration.
   "./boost/detail/utf8_codecvt_facet.hpp", line 174.17: 1540-0424 (I)
 "do_length" is declared on line 174 of
 "./boost/detail/utf8_codecvt_facet.hpp".

 The problem is that there is a mismatch in the declaration of the function
 between
 * boost/detail/utf8_codecvt_facet.hpp
 * boost/detail/utf8_codecvt_facet.ipp

 {{{
 #!cpp
     // boost/detail/utf8_codecvt_facet.hpp
     virtual int do_length(
         const std::mbstate_t &,
         const char * from,
         const char * from_end,
         std::size_t max_limit
     ) const
 }}}
 {{{
 #!cpp
     // boost/detail/utf8_codecvt_facet.ipp
     int utf8_codecvt_facet::do_length(
         BOOST_CODECVT_DO_LENGTH_CONST std::mbstate_t &,
         const char * from,
         const char * from_end,
         std::size_t max_limit
     ) const
 #if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
         throw()
 #endif
 }}}

 The solution is to add BOOST_CODECVT_DO_LENGTH_CONST and the
 BOOST_WORKAROUND macro in boost/detail/utf8_codecvt_facet.hpp


 Also, unless BOOST_DETECT_OUTDATED_WORKAROUNDS is defined,
 BOOST_WORKAROUND will always evaluate to 1 for any version of xlC, adding
 a throw() declaration.

 Maybe it should be replaced with
 {{{
 #!cpp
 #if BOOST_WORKAROUND(__IBMCPP__, <=600)
 }}}

 Last, I've filed this in filesystem component following what was done for
 https://svn.boost.org/trac/boost/ticket/7660 since there is no specific
 entry for boost/detail in the component list. It fits as well in
 serialization, program_options, etc.

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/10354>
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:16 UTC