
Eric Niebler wrote:
I just got bit by this. For the record, I don't think it's Boost.Config's business to be defining std::move, std::forward, etc.
It's not like this is a first. // BOOST_NO_STDC_NAMESPACE orkaround --------------------------------------// // Because std::size_t usage is so common, even in boost headers which do not // otherwise use the C library, the <cstddef> workaround is included here so // that ugly workaround code need not appear in many other boost headers. // NOTE WELL: This is a workaround for non-conforming compilers; <cstddef> // must still be #included in the usual places so that <cstddef> inclusion // works as expected with standard conforming compilers. The resulting // double inclusion of <cstddef> is harmless. # if defined(BOOST_NO_STDC_NAMESPACE) && defined(__cplusplus) # include <cstddef> namespace std { using ::ptrdiff_t; using ::size_t; } # endif and // BOOST_NO_STD_MIN_MAX orkaround -----------------------------------------// # if defined(BOOST_NO_STD_MIN_MAX) && defined(__cplusplus) namespace std { template <class _Tp> inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { return __b < __a ? __b : __a; } template <class _Tp> inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { return __a < __b ? __b : __a; } } # endif and // When BOOST_NO_STD_TYPEINFO is defined, we can just import // the global definition into std namespace: #if defined(BOOST_NO_STD_TYPEINFO) && defined(__cplusplus) #include <typeinfo> namespace std{ using ::type_info; } #endif