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