]> git.lyx.org Git - lyx.git/commitdiff
update boost to 1.60
authorPeter Kümmel <kuemmel@lyx.org>
Sun, 20 Dec 2015 13:04:54 +0000 (14:04 +0100)
committerPeter Kümmel <kuemmel@lyx.org>
Sun, 20 Dec 2015 13:04:54 +0000 (14:04 +0100)
287 files changed:
3rdparty/boost/boost/align/align.hpp
3rdparty/boost/boost/align/detail/address.hpp
3rdparty/boost/boost/align/detail/align.hpp
3rdparty/boost/boost/align/detail/align_cxx11.hpp
3rdparty/boost/boost/align/detail/is_alignment.hpp
3rdparty/boost/boost/aligned_storage.hpp [deleted file]
3rdparty/boost/boost/assert.hpp
3rdparty/boost/boost/bind.hpp
3rdparty/boost/boost/bind/arg.hpp
3rdparty/boost/boost/bind/bind.hpp
3rdparty/boost/boost/bind/placeholders.hpp
3rdparty/boost/boost/concept_check.hpp
3rdparty/boost/boost/config/compiler/clang.hpp
3rdparty/boost/boost/config/compiler/gcc.hpp
3rdparty/boost/boost/config/compiler/intel.hpp
3rdparty/boost/boost/config/compiler/sunpro_cc.hpp
3rdparty/boost/boost/config/compiler/visualc.hpp
3rdparty/boost/boost/config/platform/cloudabi.hpp [new file with mode: 0644]
3rdparty/boost/boost/config/platform/macos.hpp
3rdparty/boost/boost/config/platform/win32.hpp
3rdparty/boost/boost/config/select_platform_config.hpp
3rdparty/boost/boost/config/stdlib/dinkumware.hpp
3rdparty/boost/boost/config/stdlib/libstdcpp3.hpp
3rdparty/boost/boost/config/suffix.hpp
3rdparty/boost/boost/container/container_fwd.hpp
3rdparty/boost/boost/container/detail/std_fwd.hpp
3rdparty/boost/boost/core/demangle.hpp
3rdparty/boost/boost/core/enable_if.hpp
3rdparty/boost/boost/cstdint.hpp
3rdparty/boost/boost/exception/exception.hpp
3rdparty/boost/boost/format/feed_args.hpp
3rdparty/boost/boost/functional/hash/hash.hpp
3rdparty/boost/boost/lexical_cast.hpp
3rdparty/boost/boost/lexical_cast/detail/converter_lexical.hpp
3rdparty/boost/boost/lexical_cast/try_lexical_convert.hpp
3rdparty/boost/boost/math/policies/policy.hpp
3rdparty/boost/boost/math/special_functions/fpclassify.hpp
3rdparty/boost/boost/math/special_functions/math_fwd.hpp
3rdparty/boost/boost/math/tools/config.hpp
3rdparty/boost/boost/math/tools/promotion.hpp
3rdparty/boost/boost/math/tools/real_cast.hpp
3rdparty/boost/boost/move/core.hpp
3rdparty/boost/boost/move/detail/meta_utils.hpp
3rdparty/boost/boost/move/detail/std_ns_begin.hpp [new file with mode: 0644]
3rdparty/boost/boost/move/detail/std_ns_end.hpp [new file with mode: 0644]
3rdparty/boost/boost/move/detail/type_traits.hpp
3rdparty/boost/boost/move/utility_core.hpp
3rdparty/boost/boost/mpl/string.hpp
3rdparty/boost/boost/none.hpp
3rdparty/boost/boost/none_t.hpp
3rdparty/boost/boost/operators.hpp
3rdparty/boost/boost/predef.h
3rdparty/boost/boost/predef/detail/_cassert.h
3rdparty/boost/boost/predef/detail/_exception.h
3rdparty/boost/boost/predef/hardware.h [new file with mode: 0644]
3rdparty/boost/boost/predef/hardware/simd.h [new file with mode: 0644]
3rdparty/boost/boost/predef/hardware/simd/arm.h [new file with mode: 0644]
3rdparty/boost/boost/predef/hardware/simd/arm/versions.h [new file with mode: 0644]
3rdparty/boost/boost/predef/hardware/simd/ppc.h [new file with mode: 0644]
3rdparty/boost/boost/predef/hardware/simd/ppc/versions.h [new file with mode: 0644]
3rdparty/boost/boost/predef/hardware/simd/x86.h [new file with mode: 0644]
3rdparty/boost/boost/predef/hardware/simd/x86/versions.h [new file with mode: 0644]
3rdparty/boost/boost/predef/hardware/simd/x86_amd.h [new file with mode: 0644]
3rdparty/boost/boost/predef/hardware/simd/x86_amd/versions.h [new file with mode: 0644]
3rdparty/boost/boost/predef/platform/windows_desktop.h
3rdparty/boost/boost/predef/platform/windows_phone.h
3rdparty/boost/boost/predef/platform/windows_runtime.h
3rdparty/boost/boost/predef/platform/windows_store.h
3rdparty/boost/boost/predef/version.h
3rdparty/boost/boost/preprocessor/facilities/identity.hpp
3rdparty/boost/boost/preprocessor/list/append.hpp [deleted file]
3rdparty/boost/boost/preprocessor/list/transform.hpp [deleted file]
3rdparty/boost/boost/preprocessor/tuple/eat.hpp
3rdparty/boost/boost/regex/config.hpp
3rdparty/boost/boost/regex/icu.hpp
3rdparty/boost/boost/regex/pattern_except.hpp
3rdparty/boost/boost/regex/v4/basic_regex.hpp
3rdparty/boost/boost/regex/v4/basic_regex_creator.hpp
3rdparty/boost/boost/regex/v4/basic_regex_parser.hpp
3rdparty/boost/boost/regex/v4/cpp_regex_traits.hpp
3rdparty/boost/boost/regex/v4/cregex.hpp
3rdparty/boost/boost/regex/v4/fileiter.hpp
3rdparty/boost/boost/regex/v4/instances.hpp
3rdparty/boost/boost/regex/v4/iterator_traits.hpp
3rdparty/boost/boost/regex/v4/match_results.hpp
3rdparty/boost/boost/regex/v4/mem_block_cache.hpp
3rdparty/boost/boost/regex/v4/perl_matcher.hpp
3rdparty/boost/boost/regex/v4/perl_matcher_common.hpp
3rdparty/boost/boost/regex/v4/perl_matcher_non_recursive.hpp
3rdparty/boost/boost/regex/v4/perl_matcher_recursive.hpp
3rdparty/boost/boost/regex/v4/primary_transform.hpp
3rdparty/boost/boost/regex/v4/protected_call.hpp
3rdparty/boost/boost/regex/v4/regex_format.hpp
3rdparty/boost/boost/regex/v4/regex_grep.hpp
3rdparty/boost/boost/regex/v4/regex_iterator.hpp
3rdparty/boost/boost/regex/v4/regex_match.hpp
3rdparty/boost/boost/regex/v4/regex_raw_buffer.hpp
3rdparty/boost/boost/regex/v4/regex_replace.hpp
3rdparty/boost/boost/regex/v4/regex_search.hpp
3rdparty/boost/boost/regex/v4/regex_split.hpp
3rdparty/boost/boost/regex/v4/regex_token_iterator.hpp
3rdparty/boost/boost/regex/v4/regex_traits.hpp
3rdparty/boost/boost/regex/v4/regex_traits_defaults.hpp
3rdparty/boost/boost/regex/v4/regex_workaround.hpp
3rdparty/boost/boost/regex/v4/states.hpp
3rdparty/boost/boost/regex/v4/sub_match.hpp
3rdparty/boost/boost/regex/v4/u32regex_iterator.hpp
3rdparty/boost/boost/regex/v4/u32regex_token_iterator.hpp
3rdparty/boost/boost/regex/v4/w32_regex_traits.hpp
3rdparty/boost/boost/smart_ptr/detail/operator_bool.hpp
3rdparty/boost/boost/smart_ptr/detail/shared_count.hpp
3rdparty/boost/boost/smart_ptr/detail/sp_disable_deprecated.hpp [new file with mode: 0644]
3rdparty/boost/boost/smart_ptr/detail/sp_interlocked.hpp
3rdparty/boost/boost/smart_ptr/detail/yield_k.hpp
3rdparty/boost/boost/smart_ptr/scoped_ptr.hpp
3rdparty/boost/boost/smart_ptr/shared_ptr.hpp
3rdparty/boost/boost/static_assert.hpp
3rdparty/boost/boost/type_traits.hpp
3rdparty/boost/boost/type_traits/add_const.hpp
3rdparty/boost/boost/type_traits/add_cv.hpp
3rdparty/boost/boost/type_traits/add_lvalue_reference.hpp
3rdparty/boost/boost/type_traits/add_pointer.hpp
3rdparty/boost/boost/type_traits/add_reference.hpp
3rdparty/boost/boost/type_traits/add_rvalue_reference.hpp
3rdparty/boost/boost/type_traits/add_volatile.hpp
3rdparty/boost/boost/type_traits/aligned_storage.hpp [changed mode: 0755->0644]
3rdparty/boost/boost/type_traits/alignment_of.hpp
3rdparty/boost/boost/type_traits/common_type.hpp
3rdparty/boost/boost/type_traits/conditional.hpp
3rdparty/boost/boost/type_traits/config.hpp [deleted file]
3rdparty/boost/boost/type_traits/copy_cv.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/decay.hpp [changed mode: 0755->0644]
3rdparty/boost/boost/type_traits/declval.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/detail/bool_trait_def.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/bool_trait_undef.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/common_arithmetic_type.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/detail/common_type_imp.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/common_type_impl.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/detail/composite_member_pointer_type.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/detail/composite_pointer_type.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/detail/config.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/detail/cv_traits_impl.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/false_result.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/has_binary_operator.hpp
3rdparty/boost/boost/type_traits/detail/has_postfix_operator.hpp
3rdparty/boost/boost/type_traits/detail/has_prefix_operator.hpp
3rdparty/boost/boost/type_traits/detail/ice_and.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/ice_eq.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/ice_not.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/ice_or.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/is_function_ptr_helper.hpp
3rdparty/boost/boost/type_traits/detail/is_function_ptr_tester.hpp
3rdparty/boost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
3rdparty/boost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp
3rdparty/boost/boost/type_traits/detail/mp_defer.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/detail/size_t_trait_def.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/size_t_trait_undef.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/template_arity_spec.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/type_trait_def.hpp [deleted file]
3rdparty/boost/boost/type_traits/detail/type_trait_undef.hpp [deleted file]
3rdparty/boost/boost/type_traits/extent.hpp
3rdparty/boost/boost/type_traits/floating_point_promotion.hpp
3rdparty/boost/boost/type_traits/has_bit_and.hpp
3rdparty/boost/boost/type_traits/has_bit_and_assign.hpp
3rdparty/boost/boost/type_traits/has_bit_or.hpp
3rdparty/boost/boost/type_traits/has_bit_or_assign.hpp
3rdparty/boost/boost/type_traits/has_bit_xor.hpp
3rdparty/boost/boost/type_traits/has_bit_xor_assign.hpp
3rdparty/boost/boost/type_traits/has_complement.hpp
3rdparty/boost/boost/type_traits/has_dereference.hpp
3rdparty/boost/boost/type_traits/has_divides.hpp
3rdparty/boost/boost/type_traits/has_divides_assign.hpp
3rdparty/boost/boost/type_traits/has_equal_to.hpp
3rdparty/boost/boost/type_traits/has_greater.hpp
3rdparty/boost/boost/type_traits/has_greater_equal.hpp
3rdparty/boost/boost/type_traits/has_left_shift.hpp
3rdparty/boost/boost/type_traits/has_left_shift_assign.hpp
3rdparty/boost/boost/type_traits/has_less.hpp
3rdparty/boost/boost/type_traits/has_less_equal.hpp
3rdparty/boost/boost/type_traits/has_logical_and.hpp
3rdparty/boost/boost/type_traits/has_logical_or.hpp
3rdparty/boost/boost/type_traits/has_minus.hpp
3rdparty/boost/boost/type_traits/has_minus_assign.hpp
3rdparty/boost/boost/type_traits/has_modulus.hpp
3rdparty/boost/boost/type_traits/has_modulus_assign.hpp
3rdparty/boost/boost/type_traits/has_multiplies.hpp
3rdparty/boost/boost/type_traits/has_multiplies_assign.hpp
3rdparty/boost/boost/type_traits/has_new_operator.hpp
3rdparty/boost/boost/type_traits/has_not_equal_to.hpp
3rdparty/boost/boost/type_traits/has_nothrow_assign.hpp
3rdparty/boost/boost/type_traits/has_nothrow_constructor.hpp
3rdparty/boost/boost/type_traits/has_nothrow_copy.hpp
3rdparty/boost/boost/type_traits/has_nothrow_destructor.hpp
3rdparty/boost/boost/type_traits/has_operator.hpp [deleted file]
3rdparty/boost/boost/type_traits/has_plus.hpp
3rdparty/boost/boost/type_traits/has_plus_assign.hpp
3rdparty/boost/boost/type_traits/has_post_decrement.hpp
3rdparty/boost/boost/type_traits/has_post_increment.hpp
3rdparty/boost/boost/type_traits/has_pre_decrement.hpp
3rdparty/boost/boost/type_traits/has_pre_increment.hpp
3rdparty/boost/boost/type_traits/has_right_shift.hpp
3rdparty/boost/boost/type_traits/has_right_shift_assign.hpp
3rdparty/boost/boost/type_traits/has_trivial_assign.hpp
3rdparty/boost/boost/type_traits/has_trivial_constructor.hpp
3rdparty/boost/boost/type_traits/has_trivial_copy.hpp
3rdparty/boost/boost/type_traits/has_trivial_destructor.hpp
3rdparty/boost/boost/type_traits/has_trivial_move_assign.hpp
3rdparty/boost/boost/type_traits/has_trivial_move_constructor.hpp
3rdparty/boost/boost/type_traits/has_virtual_destructor.hpp
3rdparty/boost/boost/type_traits/ice.hpp [deleted file]
3rdparty/boost/boost/type_traits/integral_constant.hpp
3rdparty/boost/boost/type_traits/integral_promotion.hpp
3rdparty/boost/boost/type_traits/intrinsics.hpp
3rdparty/boost/boost/type_traits/is_abstract.hpp
3rdparty/boost/boost/type_traits/is_arithmetic.hpp
3rdparty/boost/boost/type_traits/is_array.hpp
3rdparty/boost/boost/type_traits/is_assignable.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/is_base_and_derived.hpp
3rdparty/boost/boost/type_traits/is_base_of.hpp
3rdparty/boost/boost/type_traits/is_class.hpp
3rdparty/boost/boost/type_traits/is_complex.hpp
3rdparty/boost/boost/type_traits/is_compound.hpp
3rdparty/boost/boost/type_traits/is_const.hpp
3rdparty/boost/boost/type_traits/is_constructible.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/is_convertible.hpp
3rdparty/boost/boost/type_traits/is_copy_assignable.hpp
3rdparty/boost/boost/type_traits/is_copy_constructible.hpp
3rdparty/boost/boost/type_traits/is_default_constructible.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/is_destructible.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/is_empty.hpp
3rdparty/boost/boost/type_traits/is_enum.hpp
3rdparty/boost/boost/type_traits/is_final.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/is_float.hpp
3rdparty/boost/boost/type_traits/is_floating_point.hpp [changed mode: 0755->0644]
3rdparty/boost/boost/type_traits/is_function.hpp
3rdparty/boost/boost/type_traits/is_fundamental.hpp
3rdparty/boost/boost/type_traits/is_integral.hpp
3rdparty/boost/boost/type_traits/is_lvalue_reference.hpp
3rdparty/boost/boost/type_traits/is_member_function_pointer.hpp
3rdparty/boost/boost/type_traits/is_member_object_pointer.hpp [changed mode: 0755->0644]
3rdparty/boost/boost/type_traits/is_member_pointer.hpp
3rdparty/boost/boost/type_traits/is_nothrow_move_assignable.hpp
3rdparty/boost/boost/type_traits/is_nothrow_move_constructible.hpp
3rdparty/boost/boost/type_traits/is_object.hpp
3rdparty/boost/boost/type_traits/is_pod.hpp
3rdparty/boost/boost/type_traits/is_pointer.hpp
3rdparty/boost/boost/type_traits/is_polymorphic.hpp
3rdparty/boost/boost/type_traits/is_reference.hpp
3rdparty/boost/boost/type_traits/is_rvalue_reference.hpp
3rdparty/boost/boost/type_traits/is_same.hpp
3rdparty/boost/boost/type_traits/is_scalar.hpp
3rdparty/boost/boost/type_traits/is_signed.hpp
3rdparty/boost/boost/type_traits/is_stateless.hpp
3rdparty/boost/boost/type_traits/is_union.hpp
3rdparty/boost/boost/type_traits/is_unsigned.hpp
3rdparty/boost/boost/type_traits/is_virtual_base_of.hpp
3rdparty/boost/boost/type_traits/is_void.hpp
3rdparty/boost/boost/type_traits/is_volatile.hpp
3rdparty/boost/boost/type_traits/make_signed.hpp
3rdparty/boost/boost/type_traits/make_unsigned.hpp
3rdparty/boost/boost/type_traits/promote.hpp
3rdparty/boost/boost/type_traits/rank.hpp
3rdparty/boost/boost/type_traits/remove_all_extents.hpp
3rdparty/boost/boost/type_traits/remove_bounds.hpp
3rdparty/boost/boost/type_traits/remove_const.hpp
3rdparty/boost/boost/type_traits/remove_cv.hpp
3rdparty/boost/boost/type_traits/remove_extent.hpp
3rdparty/boost/boost/type_traits/remove_pointer.hpp
3rdparty/boost/boost/type_traits/remove_reference.hpp
3rdparty/boost/boost/type_traits/remove_volatile.hpp
3rdparty/boost/boost/type_traits/type_identity.hpp [new file with mode: 0644]
3rdparty/boost/boost/type_traits/type_with_alignment.hpp
3rdparty/boost/boost/utility/declval.hpp [deleted file]
3rdparty/boost/boost/utility/value_init.hpp [deleted file]
3rdparty/boost/boost/version.hpp
3rdparty/boost/libs/regex/src/c_regex_traits.cpp
3rdparty/boost/libs/regex/src/cpp_regex_traits.cpp
3rdparty/boost/libs/regex/src/cregex.cpp
3rdparty/boost/libs/regex/src/fileiter.cpp
3rdparty/boost/libs/regex/src/icu.cpp
3rdparty/boost/libs/regex/src/posix_api.cpp
3rdparty/boost/libs/regex/src/regex.cpp
3rdparty/boost/libs/regex/src/regex_raw_buffer.cpp
3rdparty/boost/libs/regex/src/regex_traits_defaults.cpp
3rdparty/boost/libs/regex/src/w32_regex_traits.cpp
3rdparty/boost/libs/regex/src/wc_regex_traits.cpp
3rdparty/boost/libs/regex/src/wide_posix_api.cpp

index b95d673bcdee8b198b7e4f98dd12dee6c3085723..648a65e295c464ab1f26d03275e8cbcbcac7a170 100644 (file)
@@ -1,6 +1,6 @@
 /*
 (c) 2014 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
 
 Distributed under the Boost Software
 License, Version 1.0.
index 63be1a95d00590ec20e3e30000fd39b326484638..b38e57153481d67dc740d0d9c6db7280c90c1e34 100644 (file)
@@ -1,6 +1,6 @@
 /*
 (c) 2014 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
 
 Distributed under the Boost Software
 License, Version 1.0.
@@ -17,13 +17,13 @@ namespace alignment {
 namespace detail {
 
 #if defined(BOOST_HAS_INTPTR_T)
-typedef boost::uintptr_t address_t;
+typedef boost::uintptr_t address;
 #else
-typedef std::size_t address_t;
+typedef std::size_t address;
 #endif
 
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
 
 #endif
index 00be6fd6aa83275bb09ed9c4282ba33078d3112a..d2404b3e6d1181fa913f6da8749cad6801d2ed01 100644 (file)
@@ -1,6 +1,6 @@
 /*
 (c) 2014 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
 
 Distributed under the Boost Software
 License, Version 1.0.
@@ -21,7 +21,7 @@ inline void* align(std::size_t alignment, std::size_t size,
     void*& ptr, std::size_t& space)
 {
     BOOST_ASSERT(detail::is_alignment(alignment));
-    std::size_t n = detail::address_t(ptr) & (alignment - 1);
+    std::size_t n = detail::address(ptr) & (alignment - 1);
     if (n != 0) {
         n = alignment - n;
     }
@@ -34,7 +34,7 @@ inline void* align(std::size_t alignment, std::size_t size,
     return p;
 }
 
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
 
 #endif
index 80dc7e36a43b16858be899ab18dfe2c4c80cf627..a95b84c70f8c4f6182098f5ff93f80fdf6db8e77 100644 (file)
@@ -1,6 +1,6 @@
 /*
 (c) 2014 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
 
 Distributed under the Boost Software
 License, Version 1.0.
@@ -16,7 +16,7 @@ namespace alignment {
 
 using std::align;
 
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
 
 #endif
index 7ac0bb3d121a1e704af0766ed90c0420bbb63ed2..12d8df974f43b68e07cd7ebcbf010d9ea5dde72b 100644 (file)
@@ -1,6 +1,6 @@
 /*
 (c) 2014 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
 
 Distributed under the Boost Software
 License, Version 1.0.
@@ -22,8 +22,8 @@ BOOST_CONSTEXPR inline bool is_alignment(std::size_t value)
     return (value > 0) && ((value & (value - 1)) == 0);
 }
 
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
 
 #endif
diff --git a/3rdparty/boost/boost/aligned_storage.hpp b/3rdparty/boost/boost/aligned_storage.hpp
deleted file mode 100644 (file)
index b5455f0..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-//-----------------------------------------------------------------------------
-// boost aligned_storage.hpp header file
-// See http://www.boost.org for updates, documentation, and revision history.
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 2002-2003
-// Eric Friedman, Itay Maman
-//
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_ALIGNED_STORAGE_HPP
-#define BOOST_ALIGNED_STORAGE_HPP
-
-#include <cstddef> // for std::size_t
-
-#include "boost/config.hpp"
-#include "boost/detail/workaround.hpp"
-#include "boost/type_traits/alignment_of.hpp"
-#include "boost/type_traits/type_with_alignment.hpp"
-#include "boost/type_traits/is_pod.hpp"
-
-#include "boost/mpl/eval_if.hpp"
-#include "boost/mpl/identity.hpp"
-
-#include "boost/type_traits/detail/bool_trait_def.hpp"
-
-namespace boost {
-
-namespace detail { namespace aligned_storage {
-
-BOOST_STATIC_CONSTANT(
-      std::size_t
-    , alignment_of_max_align = ::boost::alignment_of<max_align>::value
-    );
-
-//
-// To be TR1 conforming this must be a POD type:
-//
-template <
-      std::size_t size_
-    , std::size_t alignment_
->
-struct aligned_storage_imp
-{
-    union data_t
-    {
-        char buf[size_];
-
-        typename ::boost::mpl::eval_if_c<
-              alignment_ == std::size_t(-1)
-            , ::boost::mpl::identity< ::boost::detail::max_align >
-            , ::boost::type_with_alignment<alignment_>
-            >::type align_;
-    } data_;
-    void* address() const { return const_cast<aligned_storage_imp*>(this); }
-};
-
-template< std::size_t alignment_ >
-struct aligned_storage_imp<0u,alignment_>
-{
-    /* intentionally empty */
-    void* address() const { return 0; }
-};
-
-}} // namespace detail::aligned_storage
-
-template <
-      std::size_t size_
-    , std::size_t alignment_ = std::size_t(-1)
->
-class aligned_storage : 
-#ifndef __BORLANDC__
-   private 
-#else
-   public
-#endif
-   ::boost::detail::aligned_storage::aligned_storage_imp<size_, alignment_> 
-{
-public: // constants
-
-    typedef ::boost::detail::aligned_storage::aligned_storage_imp<size_, alignment_> type;
-
-    BOOST_STATIC_CONSTANT(
-          std::size_t
-        , size = size_
-        );
-    BOOST_STATIC_CONSTANT(
-          std::size_t
-        , alignment = (
-              alignment_ == std::size_t(-1)
-            ? ::boost::detail::aligned_storage::alignment_of_max_align
-            : alignment_
-            )
-        );
-
-private: // noncopyable
-
-    aligned_storage(const aligned_storage&);
-    aligned_storage& operator=(const aligned_storage&);
-
-public: // structors
-
-    aligned_storage()
-    {
-    }
-
-    ~aligned_storage()
-    {
-    }
-
-public: // accessors
-
-    void* address()
-    {
-        return static_cast<type*>(this)->address();
-    }
-
-    const void* address() const
-    {
-        return static_cast<const type*>(this)->address();
-    }
-};
-
-//
-// Make sure that is_pod recognises aligned_storage<>::type
-// as a POD (Note that aligned_storage<> itself is not a POD):
-//
-template <std::size_t size_, std::size_t alignment_>
-struct is_pod< ::boost::detail::aligned_storage::aligned_storage_imp<size_,alignment_> >
-   BOOST_TT_AUX_BOOL_C_BASE(true)
-{ 
-    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(true)
-}; 
-
-
-} // namespace boost
-
-#include "boost/type_traits/detail/bool_trait_undef.hpp"
-
-#endif // BOOST_ALIGNED_STORAGE_HPP
index 1713d9bb1df8b90557afbfd467306dc4d1d43994..9650d7a2908ad5244a09ef83b403def5dac21028 100644 (file)
@@ -3,10 +3,12 @@
 //                     BOOST_ASSERT_MSG(expr, msg)
 //                     BOOST_VERIFY(expr)
 //                     BOOST_VERIFY_MSG(expr, msg)
+//                     BOOST_ASSERT_IS_VOID
 //
 //  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
 //  Copyright (c) 2007, 2014 Peter Dimov
 //  Copyright (c) Beman Dawes 2011
+//  Copyright (c) 2015 Ion Gaztanaga
 //
 //  Distributed under the Boost Software License, Version 1.0.
 //  See accompanying file LICENSE_1_0.txt or copy at
 //
 
 //
-// BOOST_ASSERT, BOOST_ASSERT_MSG
+// BOOST_ASSERT, BOOST_ASSERT_MSG, BOOST_ASSERT_IS_VOID
 //
 
 #undef BOOST_ASSERT
 #undef BOOST_ASSERT_MSG
+#undef BOOST_ASSERT_IS_VOID
 
 #if defined(BOOST_DISABLE_ASSERTS) || ( defined(BOOST_ENABLE_ASSERT_DEBUG_HANDLER) && defined(NDEBUG) )
 
 # define BOOST_ASSERT(expr) ((void)0)
 # define BOOST_ASSERT_MSG(expr, msg) ((void)0)
+# define BOOST_ASSERT_IS_VOID
 
 #elif defined(BOOST_ENABLE_ASSERT_HANDLER) || ( defined(BOOST_ENABLE_ASSERT_DEBUG_HANDLER) && !defined(NDEBUG) )
 
@@ -55,6 +59,9 @@ namespace boost
 
 # define BOOST_ASSERT(expr) assert(expr)
 # define BOOST_ASSERT_MSG(expr, msg) assert((expr)&&(msg))
+#if defined(NDEBUG)
+# define BOOST_ASSERT_IS_VOID
+#endif
 
 #endif
 
index fd3421ea5ab41109a0650f919a04946bd8f99168..450120c7a7a34731ac55f7991fe881157a781390 100644 (file)
@@ -10,7 +10,7 @@
 //
 //  bind.hpp - binds function objects to arguments
 //
-//  Copyright (c) 2009 Peter Dimov
+//  Copyright (c) 2009, 2015 Peter Dimov
 //
 //  Distributed under the Boost Software License, Version 1.0.
 //  See accompanying file LICENSE_1_0.txt or copy at
 
 #include <boost/bind/bind.hpp>
 
+#ifndef BOOST_BIND_NO_PLACEHOLDERS
+
+#if defined(BOOST_CLANG)
+# pragma clang diagnostic push
+# if  __has_warning("-Wheader-hygiene")
+#  pragma clang diagnostic ignored "-Wheader-hygiene"
+# endif
+#endif
+
+using namespace boost::placeholders;
+
+#if defined(BOOST_CLANG)
+# pragma clang diagnostic pop
+#endif
+
+#endif // #ifndef BOOST_BIND_NO_PLACEHOLDERS
+
 #endif // #ifndef BOOST_BIND_HPP_INCLUDED
index c879bb408b72e43b1e6a95ed5b066f97d10ae9f7..a74b8298bea81a51cf1ef23c5639ed9dc8f5b87f 100644 (file)
@@ -28,17 +28,17 @@ namespace boost
 
 template< int I > struct arg
 {
-    arg()
+    BOOST_CONSTEXPR arg()
     {
     }
 
-    template< class T > arg( T const & /* t */ )
+    template< class T > BOOST_CONSTEXPR arg( T const & /* t */ )
     {
         BOOST_STATIC_ASSERT( I == is_placeholder<T>::value );
     }
 };
 
-template< int I > bool operator==( arg<I> const &, arg<I> const & )
+template< int I > BOOST_CONSTEXPR bool operator==( arg<I> const &, arg<I> const & )
 {
     return true;
 }
index fd05131236ddea287fb1d6a549d04e270d1aad93..f793551d1afa65519c2453c0e45a7fa8e5a5dfe4 100644 (file)
 #include <boost/core/enable_if.hpp>
 #include <boost/core/is_same.hpp>
 
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+#include <utility> // std::forward
+#endif
+
 // Borland-specific bug, visit_each() silently fails to produce code
 
 #if defined(__BORLANDC__)
@@ -863,14 +867,337 @@ public:
 
 #if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
 
-template< class A > struct list_add_cref
+template< class A1 > class rrlist1
+{
+private:
+
+    A1 & a1_; // not A1&& because of msvc-10.0
+
+public:
+
+    explicit rrlist1( A1 & a1 ): a1_( a1 ) {}
+
+    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); } // not static_cast because of g++ 4.9
+
+    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2 > class rrlist2
 {
-    typedef A const & type;
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+
+public:
+
+    rrlist2( A1 & a1, A2 & a2 ): a1_( a1 ), a2_( a2 ) {}
+
+    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }
+
+    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3 > class rrlist3
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+
+public:
+
+    rrlist3( A1 & a1, A2 & a2, A3 & a3 ): a1_( a1 ), a2_( a2 ), a3_( a3 ) {}
+
+    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }
+
+    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
 };
 
-template< class A > struct list_add_cref< A& >
+template< class A1, class A2, class A3, class A4 > class rrlist4
 {
-    typedef A & type;
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+    A4 & a4_;
+
+public:
+
+    rrlist4( A1 & a1, A2 & a2, A3 & a3, A4 & a4 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ) {}
+
+    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); }
+
+    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3, class A4, class A5 > class rrlist5
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+    A4 & a4_;
+    A5 & a5_;
+
+public:
+
+    rrlist5( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ) {}
+
+    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); }
+
+    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3, class A4, class A5, class A6 > class rrlist6
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+    A4 & a4_;
+    A5 & a5_;
+    A6 & a6_;
+
+public:
+
+    rrlist6( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ) {}
+
+    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (boost::arg<6>) const { return std::forward<A6>( a6_ ); }
+
+    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (boost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3, class A4, class A5, class A6, class A7 > class rrlist7
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+    A4 & a4_;
+    A5 & a5_;
+    A6 & a6_;
+    A7 & a7_;
+
+public:
+
+    rrlist7( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ), a7_( a7 ) {}
+
+    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (boost::arg<6>) const { return std::forward<A6>( a6_ ); }
+    A7 && operator[] (boost::arg<7>) const { return std::forward<A7>( a7_ ); }
+
+    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (boost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); }
+    A7 && operator[] (boost::arg<7> (*) ()) const { return std::forward<A7>( a7_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class rrlist8
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+    A4 & a4_;
+    A5 & a5_;
+    A6 & a6_;
+    A7 & a7_;
+    A8 & a8_;
+
+public:
+
+    rrlist8( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ), a7_( a7 ), a8_( a8 ) {}
+
+    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (boost::arg<6>) const { return std::forward<A6>( a6_ ); }
+    A7 && operator[] (boost::arg<7>) const { return std::forward<A7>( a7_ ); }
+    A8 && operator[] (boost::arg<8>) const { return std::forward<A8>( a8_ ); }
+
+    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (boost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); }
+    A7 && operator[] (boost::arg<7> (*) ()) const { return std::forward<A7>( a7_ ); }
+    A8 && operator[] (boost::arg<8> (*) ()) const { return std::forward<A8>( a8_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > class rrlist9
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+    A4 & a4_;
+    A5 & a5_;
+    A6 & a6_;
+    A7 & a7_;
+    A8 & a8_;
+    A9 & a9_;
+
+public:
+
+    rrlist9( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ), a7_( a7 ), a8_( a8 ), a9_( a9 ) {}
+
+    A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (boost::arg<6>) const { return std::forward<A6>( a6_ ); }
+    A7 && operator[] (boost::arg<7>) const { return std::forward<A7>( a7_ ); }
+    A8 && operator[] (boost::arg<8>) const { return std::forward<A8>( a8_ ); }
+    A9 && operator[] (boost::arg<9>) const { return std::forward<A9>( a9_ ); }
+
+    A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (boost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); }
+    A7 && operator[] (boost::arg<7> (*) ()) const { return std::forward<A7>( a7_ ); }
+    A8 && operator[] (boost::arg<8> (*) ()) const { return std::forward<A8>( a8_ ); }
+    A9 && operator[] (boost::arg<9> (*) ()) const { return std::forward<A9>( a9_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
 };
 
 template<class R, class F, class L> class bind_t
@@ -903,221 +1230,109 @@ public:
 
     template<class A1> result_type operator()( A1 && a1 )
     {
-        list1< typename list_add_cref<A1>::type > a( a1 );
+        rrlist1< A1 > a( a1 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1> result_type operator()( A1 && a1 ) const
     {
-        list1< typename list_add_cref<A1>::type > a( a1 );
+        rrlist1< A1 > a( a1 );
         return l_(type<result_type>(), f_, a, 0);
     }
 
     template<class A1, class A2> result_type operator()( A1 && a1, A2 && a2 )
     {
-        list2< typename list_add_cref<A1>::type, typename list_add_cref<A2>::type > a( a1, a2 );
+        rrlist2< A1, A2 > a( a1, a2 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2> result_type operator()( A1 && a1, A2 && a2 ) const
     {
-        list2< typename list_add_cref<A1>::type, typename list_add_cref<A2>::type > a( a1, a2 );
+        rrlist2< A1, A2 > a( a1, a2 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3> result_type operator()( A1 && a1, A2 && a2, A3 && a3 )
     {
-        list3<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type
-        > a( a1, a2, a3 );
-
+        rrlist3< A1, A2, A3 > a( a1, a2, a3 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3> result_type operator()( A1 && a1, A2 && a2, A3 && a3 ) const
     {
-        list3<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type
-        > a( a1, a2, a3 );
-
+        rrlist3< A1, A2, A3 > a( a1, a2, a3 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3, class A4> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4 )
     {
-        list4<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type,
-            typename list_add_cref<A4>::type
-        > a( a1, a2, a3, a4 );
-
+        rrlist4< A1, A2, A3, A4 > a( a1, a2, a3, a4 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3, class A4> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4 ) const
     {
-        list4<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type,
-            typename list_add_cref<A4>::type
-        > a( a1, a2, a3, a4 );
-
+        rrlist4< A1, A2, A3, A4 > a( a1, a2, a3, a4 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3, class A4, class A5> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )
     {
-        list5<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type,
-            typename list_add_cref<A4>::type,
-            typename list_add_cref<A5>::type
-        > a( a1, a2, a3, a4, a5 );
-
+        rrlist5< A1, A2, A3, A4, A5 > a( a1, a2, a3, a4, a5 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3, class A4, class A5> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 ) const
     {
-        list5<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type,
-            typename list_add_cref<A4>::type,
-            typename list_add_cref<A5>::type
-        > a( a1, a2, a3, a4, a5 );
-
+        rrlist5< A1, A2, A3, A4, A5 > a( a1, a2, a3, a4, a5 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )
     {
-        list6<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type,
-            typename list_add_cref<A4>::type,
-            typename list_add_cref<A5>::type,
-            typename list_add_cref<A6>::type
-        > a( a1, a2, a3, a4, a5, a6 );
-
+        rrlist6< A1, A2, A3, A4, A5, A6 > a( a1, a2, a3, a4, a5, a6 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 ) const
     {
-        list6<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type,
-            typename list_add_cref<A4>::type,
-            typename list_add_cref<A5>::type,
-            typename list_add_cref<A6>::type
-        > a( a1, a2, a3, a4, a5, a6 );
-
+        rrlist6< A1, A2, A3, A4, A5, A6 > a( a1, a2, a3, a4, a5, a6 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )
     {
-        list7<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type,
-            typename list_add_cref<A4>::type,
-            typename list_add_cref<A5>::type,
-            typename list_add_cref<A6>::type,
-            typename list_add_cref<A7>::type
-        > a( a1, a2, a3, a4, a5, a6, a7 );
-
+        rrlist7< A1, A2, A3, A4, A5, A6, A7 > a( a1, a2, a3, a4, a5, a6, a7 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 ) const
     {
-        list7<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type,
-            typename list_add_cref<A4>::type,
-            typename list_add_cref<A5>::type,
-            typename list_add_cref<A6>::type,
-            typename list_add_cref<A7>::type
-        > a( a1, a2, a3, a4, a5, a6, a7 );
-
+        rrlist7< A1, A2, A3, A4, A5, A6, A7 > a( a1, a2, a3, a4, a5, a6, a7 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )
     {
-        list8<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type,
-            typename list_add_cref<A4>::type,
-            typename list_add_cref<A5>::type,
-            typename list_add_cref<A6>::type,
-            typename list_add_cref<A7>::type,
-            typename list_add_cref<A8>::type
-        > a( a1, a2, a3, a4, a5, a6, a7, a8 );
-
+        rrlist8< A1, A2, A3, A4, A5, A6, A7, A8 > a( a1, a2, a3, a4, a5, a6, a7, a8 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 ) const
     {
-        list8<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type,
-            typename list_add_cref<A4>::type,
-            typename list_add_cref<A5>::type,
-            typename list_add_cref<A6>::type,
-            typename list_add_cref<A7>::type,
-            typename list_add_cref<A8>::type
-        > a( a1, a2, a3, a4, a5, a6, a7, a8 );
-
+        rrlist8< A1, A2, A3, A4, A5, A6, A7, A8 > a( a1, a2, a3, a4, a5, a6, a7, a8 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )
     {
-        list9<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type,
-            typename list_add_cref<A4>::type,
-            typename list_add_cref<A5>::type,
-            typename list_add_cref<A6>::type,
-            typename list_add_cref<A7>::type,
-            typename list_add_cref<A8>::type,
-            typename list_add_cref<A9>::type
-        > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
-
+        rrlist9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 ) const
     {
-        list9<
-            typename list_add_cref<A1>::type,
-            typename list_add_cref<A2>::type,
-            typename list_add_cref<A3>::type,
-            typename list_add_cref<A4>::type,
-            typename list_add_cref<A5>::type,
-            typename list_add_cref<A6>::type,
-            typename list_add_cref<A7>::type,
-            typename list_add_cref<A8>::type,
-            typename list_add_cref<A9>::type
-        > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
-
+        rrlist9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
         return l_( type<result_type>(), f_, a, 0 );
     }
 
index 3b098b14f8a71f2cd0dd753f3ba29a092e1d4a0b..b819ef4c46d3a2fef25f7779e558d5501016f0f5 100644 (file)
 //  bind/placeholders.hpp - _N definitions
 //
 //  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//  Copyright 2015 Peter Dimov
 //
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
 //
 //  See http://www.boost.org/libs/bind/bind.html for documentation.
 //
 #include <boost/bind/arg.hpp>
 #include <boost/config.hpp>
 
-namespace
+namespace boost
 {
 
-#if defined(__BORLANDC__) || defined(__GNUC__) && (__GNUC__ < 4)
-
-static inline boost::arg<1> _1() { return boost::arg<1>(); }
-static inline boost::arg<2> _2() { return boost::arg<2>(); }
-static inline boost::arg<3> _3() { return boost::arg<3>(); }
-static inline boost::arg<4> _4() { return boost::arg<4>(); }
-static inline boost::arg<5> _5() { return boost::arg<5>(); }
-static inline boost::arg<6> _6() { return boost::arg<6>(); }
-static inline boost::arg<7> _7() { return boost::arg<7>(); }
-static inline boost::arg<8> _8() { return boost::arg<8>(); }
-static inline boost::arg<9> _9() { return boost::arg<9>(); }
+namespace placeholders
+{
 
-#elif defined(BOOST_MSVC) || (defined(__DECCXX_VER) && __DECCXX_VER <= 60590031) || defined(__MWERKS__) || \
-    defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ < 2)  
+#if defined(__BORLANDC__) || defined(__GNUC__) && (__GNUC__ < 4)
 
-static boost::arg<1> _1;
-static boost::arg<2> _2;
-static boost::arg<3> _3;
-static boost::arg<4> _4;
-static boost::arg<5> _5;
-static boost::arg<6> _6;
-static boost::arg<7> _7;
-static boost::arg<8> _8;
-static boost::arg<9> _9;
+inline boost::arg<1> _1() { return boost::arg<1>(); }
+inline boost::arg<2> _2() { return boost::arg<2>(); }
+inline boost::arg<3> _3() { return boost::arg<3>(); }
+inline boost::arg<4> _4() { return boost::arg<4>(); }
+inline boost::arg<5> _5() { return boost::arg<5>(); }
+inline boost::arg<6> _6() { return boost::arg<6>(); }
+inline boost::arg<7> _7() { return boost::arg<7>(); }
+inline boost::arg<8> _8() { return boost::arg<8>(); }
+inline boost::arg<9> _9() { return boost::arg<9>(); }
 
 #else
 
-boost::arg<1> _1;
-boost::arg<2> _2;
-boost::arg<3> _3;
-boost::arg<4> _4;
-boost::arg<5> _5;
-boost::arg<6> _6;
-boost::arg<7> _7;
-boost::arg<8> _8;
-boost::arg<9> _9;
+BOOST_STATIC_CONSTEXPR boost::arg<1> _1;
+BOOST_STATIC_CONSTEXPR boost::arg<2> _2;
+BOOST_STATIC_CONSTEXPR boost::arg<3> _3;
+BOOST_STATIC_CONSTEXPR boost::arg<4> _4;
+BOOST_STATIC_CONSTEXPR boost::arg<5> _5;
+BOOST_STATIC_CONSTEXPR boost::arg<6> _6;
+BOOST_STATIC_CONSTEXPR boost::arg<7> _7;
+BOOST_STATIC_CONSTEXPR boost::arg<8> _8;
+BOOST_STATIC_CONSTEXPR boost::arg<9> _9;
 
 #endif
 
-} // unnamed namespace
+} // namespace placeholders
+
+} // namespace boost
 
 #endif // #ifndef BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED
index 2d6fa323324e42f5938fc3fda69b6874d89463b6..25f118b6438a44337ff1cb4d628af417541c09de 100644 (file)
@@ -19,7 +19,7 @@
 
 # include <boost/concept/assert.hpp>
 
-# include <boost/iterator.hpp>
+# include <iterator>
 # include <boost/type_traits/conversion_traits.hpp>
 # include <utility>
 # include <boost/type_traits/is_same.hpp>
@@ -27,7 +27,6 @@
 # include <boost/mpl/assert.hpp>
 # include <boost/mpl/bool.hpp>
 # include <boost/detail/workaround.hpp>
-# include <boost/detail/iterator.hpp>
 
 # include <boost/concept/usage.hpp>
 # include <boost/concept/detail/concept_def.hpp>
@@ -504,11 +503,11 @@ namespace boost
     : Assignable<TT>
     , EqualityComparable<TT>
   {
-      typedef typename boost::detail::iterator_traits<TT>::value_type value_type;
-      typedef typename boost::detail::iterator_traits<TT>::difference_type difference_type;
-      typedef typename boost::detail::iterator_traits<TT>::reference reference;
-      typedef typename boost::detail::iterator_traits<TT>::pointer pointer;
-      typedef typename boost::detail::iterator_traits<TT>::iterator_category iterator_category;
+      typedef typename std::iterator_traits<TT>::value_type value_type;
+      typedef typename std::iterator_traits<TT>::difference_type difference_type;
+      typedef typename std::iterator_traits<TT>::reference reference;
+      typedef typename std::iterator_traits<TT>::pointer pointer;
+      typedef typename std::iterator_traits<TT>::iterator_category iterator_category;
 
       BOOST_CONCEPT_USAGE(InputIterator)
       {
@@ -617,7 +616,7 @@ namespace boost
    private:
     TT a, b;
     TT i, j;
-      typename boost::detail::iterator_traits<TT>::difference_type n;
+      typename std::iterator_traits<TT>::difference_type n;
   };
 
   BOOST_concept(Mutable_RandomAccessIterator,(TT))
@@ -630,7 +629,7 @@ namespace boost
       }
    private:
     TT i;
-    typename boost::detail::iterator_traits<TT>::difference_type n;
+    typename std::iterator_traits<TT>::difference_type n;
   };
 
   //===========================================================================
index 47ea65b0a20dfb639dcf374d57b75a7e6f261c8c..5481e5ee62358bccd55b68cb1093e12582396897 100644 (file)
 #define __has_extension __has_feature
 #endif
 
+#ifndef __has_attribute
+#define __has_attribute(x) 0
+#endif
+
 #if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS)
 #  define BOOST_NO_EXCEPTIONS
 #endif
 // even though it defines __SIZEOF_INT128__.
 // See https://svn.boost.org/trac/boost/ticket/10418
 // Only re-enable this for nvcc if you're absolutely sure
-// of the circumstances under which it's supported:
+// of the circumstances under which it's supported.
+// Similarly __SIZEOF_INT128__ is defined when targetting msvc
+// compatibility even though the required support functions are absent.
 //
-#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__)
+#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__) && !defined(_MSC_VER)
 #  define BOOST_HAS_INT128
 #endif
 
 // All versions with __cplusplus above this value seem to support this:
 #  define BOOST_NO_CXX14_DIGIT_SEPARATORS
 #endif
-
-
-// Unused attribute:
-#if defined(__GNUC__) && (__GNUC__ >= 4)
-#  define BOOST_ATTRIBUTE_UNUSED __attribute__((unused))
+//
+// __builtin_unreachable:
+#if defined(__has_builtin) && __has_builtin(__builtin_unreachable)
+#define BOOST_UNREACHABLE_RETURN(x) __builtin_unreachable();
 #endif
 
+// Clang has supported the 'unused' attribute since the first release.
+#define BOOST_ATTRIBUTE_UNUSED __attribute__((__unused__))
+
 #ifndef BOOST_COMPILER
 #  define BOOST_COMPILER "Clang version " __clang_version__
 #endif
index 41705df039603dd3aa97e9cf07e0da154223d7dc..d9dd59dc5fd22684445d89dcc6fc5639d6cc708d 100644 (file)
 #if defined(__SIZEOF_INT128__) && !defined(__CUDACC__)
 #  define BOOST_HAS_INT128
 #endif
+//
+// Recent GCC versions have a __float128 native type, we need to
+// include a std lib header to detect this - not ideal, but we'll
+// be including <cstddef> later anyway when we select the std lib.
+//
+#ifdef __cplusplus
+#include <cstddef>
+#else
+#include <stddef.h>
+#endif
+#if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__)
+# define BOOST_HAS_FLOAT128
+#endif
 
 // C++0x features in 4.3.n and later
 //
 //
 // Unused attribute:
 #if __GNUC__ >= 4
-#  define BOOST_ATTRIBUTE_UNUSED __attribute__((unused))
+#  define BOOST_ATTRIBUTE_UNUSED __attribute__((__unused__))
+#endif
+//
+// __builtin_unreachable:
+#if BOOST_GCC_VERSION >= 40800
+#define BOOST_UNREACHABLE_RETURN(x) __builtin_unreachable();
 #endif
 
 #ifndef BOOST_COMPILER
index ecfacc5e706eed12f017e4fac9e1f87345474371..7789b944648e558b7d31630c8327dfcb9f69df96 100644 (file)
@@ -20,6 +20,9 @@
 
 #include <boost/config/compiler/visualc.hpp>
 
+#undef BOOST_MSVC
+#undef BOOST_MSVC_FULL_VER
+
 #if (__INTEL_COMPILER >= 1500) && (_MSC_VER >= 1900)
 //
 // These appear to be supported, even though VC++ may not support them:
@@ -36,6 +39,9 @@
 
 #include <boost/config/compiler/gcc.hpp>
 
+#undef BOOST_GCC_VERSION
+#undef BOOST_GCC_CXX11
+
 #endif
 
 #undef BOOST_COMPILER
index 2fd6d3ece0ca2519d18be08d2b60a197d2c03cce..6017660cbbb5eba23940dfba488032ed754ef994 100644 (file)
 #define BOOST_NO_CXX11_FINAL
 #endif
 
-//
-// Issues that effect all known versions:
-//
-// Variadic templates pass our test case, but enabling this
-// causes the compiler to issue a signal 11 and bail out
-// in various libraries.  The others fail our test cases.
-//
+#if (__SUNPRO_CC < 0x5140) || (__cplusplus < 201103)
 #define BOOST_NO_CXX11_VARIADIC_TEMPLATES
 #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
 #define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS
 #define BOOST_NO_CXX11_DECLTYPE_N3276
 #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
 #define BOOST_NO_CXX11_REF_QUALIFIERS
+#endif
+
 #define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
 //
 // C++0x features
index 93908cea50487cc10207ad8ed07fe933bd996f73..baaab589efacfab82c8106e728d7deba94977038 100644 (file)
@@ -55,6 +55,7 @@
 #  define BOOST_NO_CXX11_EXTERN_TEMPLATE
 // Variadic macros do not exist for VC7.1 and lower
 #  define BOOST_NO_CXX11_VARIADIC_MACROS
+#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
 #endif
 
 #if _MSC_VER < 1500  // 140X == VC++ 8.0
diff --git a/3rdparty/boost/boost/config/platform/cloudabi.hpp b/3rdparty/boost/boost/config/platform/cloudabi.hpp
new file mode 100644 (file)
index 0000000..bed7b63
--- /dev/null
@@ -0,0 +1,18 @@
+//       Copyright Nuxi, https://nuxi.nl/ 2015.
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PLATFORM "CloudABI"
+
+#define BOOST_HAS_DIRENT_H
+#define BOOST_HAS_STDINT_H
+#define BOOST_HAS_UNISTD_H
+
+#define BOOST_HAS_CLOCK_GETTIME
+#define BOOST_HAS_EXPM1
+#define BOOST_HAS_GETTIMEOFDAY
+#define BOOST_HAS_LOG1P
+#define BOOST_HAS_NANOSLEEP
+#define BOOST_HAS_PTHREADS
+#define BOOST_HAS_SCHED_YIELD
index 6d876b12db3849ba3a27ba22959574d3127be277..5be4e3b3da2ff48149c041ab26f2d25bd90a05c1 100644 (file)
@@ -47,7 +47,7 @@
 #    define BOOST_NO_STDC_NAMESPACE
 #  endif
 
-#  if (__GNUC__ == 4)
+#  if (__GNUC__ >= 4)
 
 // Both gcc and intel require these.  
 #    define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
index 60a29abe832315d98cbd9e04e15bf00afa93b8e3..450158fbaabb0968aca52058a06386128185dd6d 100644 (file)
 #  define BOOST_HAS_GETSYSTEMTIMEASFILETIME
 #endif
 
+//
+// Windows Runtime
+//
+#if defined(WINAPI_FAMILY) && \
+  (WINAPI_FAMILY == WINAPI_FAMILY_APP || WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)
+#  define BOOST_NO_ANSI_APIS
+#endif
+
 #ifndef BOOST_DISABLE_WIN32
 // WEK: Added
 #define BOOST_HAS_FTIME
index acd1409ebcc2d0314515e98303699c5dcbe53c14..62fd818b9356f60fb41c0598af88d93f210c57d0 100644 (file)
 #elif defined(__VMS) 
 // VMS:
 #  define BOOST_PLATFORM_CONFIG "boost/config/platform/vms.hpp" 
+
+#elif defined(__CloudABI__)
+// Nuxi CloudABI:
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/cloudabi.hpp"
 #else
 
 #  if defined(unix) \
index 90c45c6c233c563312f8cbd4a41251cdb75f6191..af8ddda528dad19c613ae599ee92ad41a0bfe423 100644 (file)
 // Bug specific to VC14, 
 // See https://connect.microsoft.com/VisualStudio/feedback/details/1348277/link-error-when-using-std-codecvt-utf8-utf16-char16-t
 // and discussion here: http://blogs.msdn.com/b/vcblog/archive/2014/11/12/visual-studio-2015-preview-now-available.aspx?PageIndex=2
-#if  _CPPLIB_VER == 650
+#if defined(_CPPLIB_VER) && (_CPPLIB_VER == 650)
 #  define BOOST_NO_CXX11_HDR_CODECVT
 #endif
 
+#if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 650)
+// If _HAS_AUTO_PTR_ETC is defined to 0, std::auto_ptr is not available.
+// See https://www.visualstudio.com/en-us/news/vs2015-vs.aspx#C++
+// and http://blogs.msdn.com/b/vcblog/archive/2015/06/19/c-11-14-17-features-in-vs-2015-rtm.aspx
+#  if defined(_HAS_AUTO_PTR_ETC) && (_HAS_AUTO_PTR_ETC == 0)
+#    define BOOST_NO_AUTO_PTR
+#  endif
+#endif
+
 #ifdef _CPPLIB_VER
 #  define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER
 #else
index 7d27b0cc0cbfb5d50e5b6ded27dd195d5b928c34..9718bedcf23117bdf5a2b24d230a2c99d7cf1422 100644 (file)
 #define BOOST_NO_CXX11_HDR_FUTURE
 #define BOOST_NO_CXX11_HDR_FORWARD_LIST 
 #define BOOST_NO_CXX11_HDR_ATOMIC
+// shared_ptr is present, but is not convertible to bool
+// which causes all kinds of problems especially in Boost.Thread
+// but probably elsewhere as well.
+#define BOOST_NO_CXX11_SMART_PTR
 #endif
 
 #if (!defined(_GLIBCXX_HAS_GTHREADS) || !defined(_GLIBCXX_USE_C99_STDINT_TR1))
index c0ba33391813be93a96ee5cae1684f0618c43493..17bf1020f547600753e3fee5a2ee26230c02afcc 100644 (file)
@@ -444,10 +444,12 @@ namespace std {
 // is defined, in which case it evaluates to return x; Use when you have a return
 // statement that can never be reached.
 
-#ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION
-#  define BOOST_UNREACHABLE_RETURN(x) return x;
-#else
-#  define BOOST_UNREACHABLE_RETURN(x)
+#ifndef BOOST_UNREACHABLE_RETURN
+#  ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION
+#     define BOOST_UNREACHABLE_RETURN(x) return x;
+#  else
+#     define BOOST_UNREACHABLE_RETURN(x)
+#  endif
 #endif
 
 // BOOST_DEDUCED_TYPENAME workaround ------------------------------------------//
@@ -501,6 +503,16 @@ namespace boost{
 #  endif
 }
 #endif
+// same again for __float128:
+#if defined(BOOST_HAS_FLOAT128) && defined(__cplusplus)
+namespace boost {
+#  ifdef __GNUC__
+   __extension__ typedef __float128 float128_type;
+#  else
+   typedef __float128 float128_type;
+#  endif
+}
+#endif
 
 // BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------//
 
index a9b421c2b22d8a1d72b90bbd9f891e0fa5a41314..e85a6ce95242663a0ff1ee1b09732a38759f053f 100644 (file)
@@ -24,6 +24,7 @@
 //!   - boost::container::vector
 //!   - boost::container::stable_vector
 //!   - boost::container::static_vector
+//!   - boost::container::small_vector
 //!   - boost::container::slist
 //!   - boost::container::list
 //!   - boost::container::set
 //!   - boost::container::string
 //!   - boost::container::wstring
 //!
-//! It forward declares the following allocators:
+//! Forward declares the following allocators:
 //!   - boost::container::allocator
 //!   - boost::container::node_allocator
 //!   - boost::container::adaptive_pool
 //!
+//! Forward declares the following polymorphic resource classes:
+//!   - boost::container::pmr::memory_resource
+//!   - boost::container::pmr::polymorphic_allocator
+//!   - boost::container::pmr::monotonic_buffer_resource
+//!   - boost::container::pmr::pool_options
+//!   - boost::container::pmr::unsynchronized_pool_resource
+//!   - boost::container::pmr::synchronized_pool_resource
+//!
 //! And finally it defines the following types
 
 #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
 
 namespace boost{
 namespace intrusive{
+namespace detail{
    //Create namespace to avoid compilation errors
-}}
+}}}
 
 namespace boost{ namespace container{ namespace container_detail{
    namespace bi = boost::intrusive;
+   namespace bid = boost::intrusive::detail;
+}}}
+
+namespace boost{ namespace container{ namespace pmr{
+   namespace bi = boost::intrusive;
+   namespace bid = boost::intrusive::detail;
 }}}
 
 #include <cstddef>
@@ -210,6 +226,26 @@ template
    , std::size_t Version = 2>
 class node_allocator;
 
+namespace pmr {
+
+class memory_resource;
+
+template<class T>
+class polymorphic_allocator;
+
+class monotonic_buffer_resource;
+
+struct pool_options;
+
+template <class Allocator>
+class resource_adaptor_imp;
+
+class unsynchronized_pool_resource;
+
+class synchronized_pool_resource;
+
+}  //namespace pmr {
+
 #else
 
 //! Default options for tree-based associative containers
index 1277df071f6dd0960ffbb4627852e873637103f4..09678123ff7ba0b13de0a8212abf88790f1240a5 100644 (file)
 //                        Standard predeclarations
 //////////////////////////////////////////////////////////////////////////////
 
-#if defined(_LIBCPP_VERSION)
-   #define BOOST_CONTAINER_CLANG_INLINE_STD_NS
-   #pragma GCC diagnostic push
-   #if defined(__clang__)
-      #pragma GCC diagnostic ignored "-Wc++11-extensions"
-   #endif
-   #define BOOST_CONTAINER_STD_NS_BEG _LIBCPP_BEGIN_NAMESPACE_STD
-   #define BOOST_CONTAINER_STD_NS_END _LIBCPP_END_NAMESPACE_STD
-#elif defined(BOOST_GNU_STDLIB) && defined(_GLIBCXX_BEGIN_NAMESPACE_VERSION)  //GCC >= 4.6
-   #define BOOST_CONTAINER_STD_NS_BEG namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION
-   #define BOOST_CONTAINER_STD_NS_END _GLIBCXX_END_NAMESPACE_VERSION  } // namespace
-#elif defined(BOOST_GNU_STDLIB) && defined(_GLIBCXX_BEGIN_NAMESPACE)  //GCC >= 4.2
-   #define BOOST_CONTAINER_STD_NS_BEG _GLIBCXX_BEGIN_NAMESPACE(std)
-   #define BOOST_CONTAINER_STD_NS_END _GLIBCXX_END_NAMESPACE
-#else
-   #define BOOST_CONTAINER_STD_NS_BEG namespace std{
-   #define BOOST_CONTAINER_STD_NS_END }
-#endif
-
-BOOST_CONTAINER_STD_NS_BEG
+#include <boost/move/detail/std_ns_begin.hpp>
+BOOST_MOVE_STD_NS_BEG
 
 template<class T>
 class allocator;
@@ -66,11 +48,9 @@ class insert_iterator;
 
 struct allocator_arg_t;
 
-BOOST_CONTAINER_STD_NS_END
+struct piecewise_construct_t;
 
-#ifdef BOOST_CONTAINER_CLANG_INLINE_STD_NS
-   #pragma GCC diagnostic pop
-   #undef BOOST_CONTAINER_CLANG_INLINE_STD_NS
-#endif   //BOOST_CONTAINER_CLANG_INLINE_STD_NS
+BOOST_MOVE_STD_NS_END
+#include <boost/move/detail/std_ns_end.hpp>
 
 #endif //#ifndef BOOST_CONTAINER_DETAIL_STD_FWD_HPP
index eebd0ce0f19134a639201b3be52b907e2e08b4d3..44aeb8ded7647156d4fef7e8eddcf7143ee0779c 100644 (file)
 
 #if defined( BOOST_CORE_HAS_CXXABI_H )
 # include <cxxabi.h>
-# include <cstdlib>
-# include <cstddef>
+// For some archtectures (mips, mips64, x86, x86_64) cxxabi.h in Android NDK is implemented by gabi++ library
+// (https://android.googlesource.com/platform/ndk/+/master/sources/cxx-stl/gabi++/), which does not implement
+// abi::__cxa_demangle(). We detect this implementation by checking the include guard here.
+# if defined( __GABIXX_CXXABI_H__ )
+#  undef BOOST_CORE_HAS_CXXABI_H
+# else
+#  include <cstdlib>
+#  include <cstddef>
+# endif
 #endif
 
 namespace boost
index a3302b18a1fc16441a687442b3db66b78de644b6..5dcef1e035406d32572fab0c4eca99403272bb9b 100644 (file)
 
 namespace boost
 {
+  template<typename T, typename R=void>
+  struct enable_if_has_type
+  {
+    typedef R type;
+  };
  
   template <bool B, class T = void>
   struct enable_if_c {
@@ -80,6 +85,10 @@ namespace boost {
   template <typename T>
   struct enable_if_does_not_work_on_this_compiler;
 
+  template<typename T, typename R=void>
+  struct enable_if_has_type : enable_if_does_not_work_on_this_compiler<T>
+  { };
+
   template <bool B, class T = detail::enable_if_default_T>
   struct enable_if_c : enable_if_does_not_work_on_this_compiler<T>
   { };
index 69888352dae572432abd9ba7a9835c996bac15b0..bf7097ec8cb051ed36e80b12bf36aadd37aec94c 100644 (file)
@@ -69,7 +69,7 @@
 
 # endif
 
-#ifdef __QNX__
+#if defined(__QNX__) && defined(__EXT_QNX) 
 
 // QNX (Dinkumware stdlib) defines these as non-standard names.
 // Reflect to the standard names.
index d762cf827e1c0175b03f1919f165e8003e1c505c..1f2bd9c20074590554d3b949b48e96ad4a300800 100644 (file)
@@ -432,6 +432,11 @@ boost
             {
             }
 
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility push (default)
+# endif
+#endif
         template <class T>
         class
         clone_impl:
@@ -473,6 +478,11 @@ boost
                 }
             };
         }
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility pop
+# endif
+#endif
 
     template <class T>
     inline
index 95bbe5e2520226f74d146f91fcbef98bf868849b..fa45d215d8d391589d28d799e629aa573ae0fa3f 100644 (file)
@@ -172,6 +172,10 @@ namespace detail {
         typedef typename string_type::size_type size_type;
 
         basic_oaltstringstream<Ch, Tr, Alloc>  oss( &buf);
+
+        if(loc_p != NULL)
+            oss.imbue(*loc_p);
+        
         specs.fmtstate_.apply_on(oss, loc_p);
 
         // the stream format state can be modified by manipulators in the argument :
index 3e5ab5bcf9de8d01331438f1736eefdcfea9e6bf..2fb9f2111655aaacf4f5deaed01ff4deba044730 100644 (file)
@@ -411,7 +411,7 @@ namespace boost
     // passed by copy.
     //
     // BOOST_HASH_SPECIALIZE_REF - define a specialization for a type which is
-    // passed by copy.
+    // passed by const reference.
     //
     // These are undefined later.
 
index a880c0cd9ccbbfc978e6ea2c9c892677c7d6f26a..dc3d7e3fb7d917ac223e582ba2077f6bfb67af74 100644 (file)
 #include <boost/range/iterator_range_core.hpp>
 #include <boost/lexical_cast/bad_lexical_cast.hpp>
 #include <boost/lexical_cast/try_lexical_convert.hpp>
-#include <boost/utility/value_init.hpp>
 
 namespace boost 
 {
     template <typename Target, typename Source>
     inline Target lexical_cast(const Source &arg)
     {
-        boost::value_initialized<Target> result;
+        Target result;
 
-        if (!boost::conversion::detail::try_lexical_convert(arg, get(result))) {
+        if (!boost::conversion::detail::try_lexical_convert(arg, result)) {
             boost::conversion::detail::throw_bad_cast<Source, Target>();
         }
 
-        return get(result);
+        return result;
     }
 
     template <typename Target>
index 6a7878bdbe7293436b735dfbdd2aa760feb68a42..fd866d84e51c7fa44e1e75b915aaf312638144ac 100644 (file)
@@ -364,7 +364,6 @@ namespace boost {
 #endif
         };
 
-#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION
         // Helper for floating point types.
         // -1.23456789e-123456
         // ^                   sign
@@ -380,6 +379,8 @@ namespace boost {
                 Source, BOOST_DEDUCED_TYPENAME boost::enable_if<boost::is_float<Source> >::type
             >
         {
+
+#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION
             BOOST_STATIC_ASSERT(
                     std::numeric_limits<Source>::max_exponent10 <=  999999L &&
                     std::numeric_limits<Source>::min_exponent10 >= -999999L
@@ -388,8 +389,10 @@ namespace boost {
             BOOST_STATIC_CONSTANT(std::size_t, value =
                     5 + lcast_precision<Source>::value + 6
                 );
-        };
+#else // #ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION
+            BOOST_STATIC_CONSTANT(std::size_t, value = 156);
 #endif // #ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION
+        };
     }
 
     namespace detail // lexical_cast_stream_traits<Source, Target>
index 66270eee76b199060c77eaad37bf8912add6ce8b..1881cdf371440e504e9b519fb6e4178854a77f37 100644 (file)
 #   pragma once
 #endif
 
+#if defined(__clang__) || (defined(__GNUC__) && \
+    !(defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)) && \
+    (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)))
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wuninitialized"
+#endif
+
 #include <string>
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/identity.hpp>
@@ -195,5 +202,11 @@ namespace boost {
 
 } // namespace boost
 
+#if defined(__clang__) || (defined(__GNUC__) && \
+    !(defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)) && \
+    (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)))
+#pragma GCC diagnostic pop
+#endif
+
 #endif // BOOST_LEXICAL_CAST_TRY_LEXICAL_CONVERT_HPP
 
index 71309fa116e9fa92d9d6f7cadd07497183a5f269..de813fb8aa5c7bc0fb1f846d07493bc610731978 100644 (file)
@@ -33,9 +33,9 @@ namespace boost{ namespace math{
 namespace tools{
 
 template <class T>
-int digits(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T));
+BOOST_MATH_CONSTEXPR int digits(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) BOOST_NOEXCEPT;
 template <class T>
-T epsilon(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T));
+BOOST_MATH_CONSTEXPR T epsilon(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) BOOST_MATH_NOEXCEPT(T);
 
 }
 
@@ -44,6 +44,28 @@ namespace policies{
 //
 // Define macros for our default policies, if they're not defined already:
 //
+// Special cases for exceptions disabled first:
+//
+#ifdef BOOST_NO_EXCEPTIONS
+#  ifndef BOOST_MATH_DOMAIN_ERROR_POLICY
+#    define BOOST_MATH_DOMAIN_ERROR_POLICY errno_on_error
+#  endif
+#  ifndef BOOST_MATH_POLE_ERROR_POLICY
+#     define BOOST_MATH_POLE_ERROR_POLICY errno_on_error
+#  endif
+#  ifndef BOOST_MATH_OVERFLOW_ERROR_POLICY
+#     define BOOST_MATH_OVERFLOW_ERROR_POLICY errno_on_error
+#  endif
+#  ifndef BOOST_MATH_EVALUATION_ERROR_POLICY
+#     define BOOST_MATH_EVALUATION_ERROR_POLICY errno_on_error
+#  endif
+#  ifndef BOOST_MATH_ROUNDING_ERROR_POLICY
+#     define BOOST_MATH_ROUNDING_ERROR_POLICY errno_on_error
+#  endif
+#endif
+//
+// Then the regular cases:
+//
 #ifndef BOOST_MATH_DOMAIN_ERROR_POLICY
 #define BOOST_MATH_DOMAIN_ERROR_POLICY throw_on_error
 #endif
@@ -622,81 +644,81 @@ struct normalise<policy<detail::forwarding_arg1, detail::forwarding_arg2>,
    typedef policy<detail::forwarding_arg1, detail::forwarding_arg2> type;
 };
 
-inline policy<> make_policy()
+inline BOOST_MATH_CONSTEXPR policy<> make_policy() BOOST_NOEXCEPT
 { return policy<>(); }
 
 template <class A1>
-inline typename normalise<policy<>, A1>::type make_policy(const A1&)
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1>::type make_policy(const A1&) BOOST_NOEXCEPT
 { 
    typedef typename normalise<policy<>, A1>::type result_type;
    return result_type(); 
 }
 
 template <class A1, class A2>
-inline typename normalise<policy<>, A1, A2>::type make_policy(const A1&, const A2&)
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2>::type make_policy(const A1&, const A2&) BOOST_NOEXCEPT
 { 
    typedef typename normalise<policy<>, A1, A2>::type result_type;
    return result_type(); 
 }
 
 template <class A1, class A2, class A3>
-inline typename normalise<policy<>, A1, A2, A3>::type make_policy(const A1&, const A2&, const A3&)
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3>::type make_policy(const A1&, const A2&, const A3&) BOOST_NOEXCEPT
 { 
    typedef typename normalise<policy<>, A1, A2, A3>::type result_type;
    return result_type(); 
 }
 
 template <class A1, class A2, class A3, class A4>
-inline typename normalise<policy<>, A1, A2, A3, A4>::type make_policy(const A1&, const A2&, const A3&, const A4&)
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4>::type make_policy(const A1&, const A2&, const A3&, const A4&) BOOST_NOEXCEPT
 { 
    typedef typename normalise<policy<>, A1, A2, A3, A4>::type result_type;
    return result_type(); 
 }
 
 template <class A1, class A2, class A3, class A4, class A5>
-inline typename normalise<policy<>, A1, A2, A3, A4, A5>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&)
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&) BOOST_NOEXCEPT
 { 
    typedef typename normalise<policy<>, A1, A2, A3, A4, A5>::type result_type;
    return result_type(); 
 }
 
 template <class A1, class A2, class A3, class A4, class A5, class A6>
-inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&)
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&) BOOST_NOEXCEPT
 { 
    typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type result_type;
    return result_type(); 
 }
 
 template <class A1, class A2, class A3, class A4, class A5, class A6, class A7>
-inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&)
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&) BOOST_NOEXCEPT
 { 
    typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7>::type result_type;
    return result_type(); 
 }
 
 template <class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
-inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&)
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&) BOOST_NOEXCEPT
 { 
    typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8>::type result_type;
    return result_type(); 
 }
 
 template <class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
-inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&)
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&) BOOST_NOEXCEPT
 { 
    typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9>::type result_type;
    return result_type(); 
 }
 
 template <class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
-inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&, const A10&)
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&, const A10&) BOOST_NOEXCEPT
 { 
    typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::type result_type;
    return result_type(); 
 }
 
 template <class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
-inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&, const A10&, const A11&)
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&, const A10&, const A11&) BOOST_NOEXCEPT
 {
    typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::type result_type;
    return result_type();
@@ -825,7 +847,7 @@ struct precision<BOOST_MATH_FLOAT128_TYPE, Policy>
 namespace detail{
 
 template <class T, class Policy>
-inline int digits_imp(mpl::true_ const&)
+inline BOOST_MATH_CONSTEXPR int digits_imp(mpl::true_ const&) BOOST_NOEXCEPT
 {
 #ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
    BOOST_STATIC_ASSERT( ::std::numeric_limits<T>::is_specialized);
@@ -837,7 +859,7 @@ inline int digits_imp(mpl::true_ const&)
 }
 
 template <class T, class Policy>
-inline int digits_imp(mpl::false_ const&)
+inline BOOST_MATH_CONSTEXPR int digits_imp(mpl::false_ const&) BOOST_NOEXCEPT
 {
    return tools::digits<T>();
 }
@@ -845,26 +867,26 @@ inline int digits_imp(mpl::false_ const&)
 } // namespace detail
 
 template <class T, class Policy>
-inline int digits(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T))
+inline BOOST_MATH_CONSTEXPR int digits(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) BOOST_NOEXCEPT
 {
    typedef mpl::bool_< std::numeric_limits<T>::is_specialized > tag_type;
    return detail::digits_imp<T, Policy>(tag_type());
 }
 template <class T, class Policy>
-inline int digits_base10(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T))
+inline BOOST_MATH_CONSTEXPR int digits_base10(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) BOOST_NOEXCEPT
 {
    return boost::math::policies::digits<T, Policy>() * 301 / 1000L;
 }
 
 template <class Policy>
-inline unsigned long get_max_series_iterations()
+inline BOOST_MATH_CONSTEXPR unsigned long get_max_series_iterations() BOOST_NOEXCEPT
 {
    typedef typename Policy::max_series_iterations_type iter_type;
    return iter_type::value;
 }
 
 template <class Policy>
-inline unsigned long get_max_root_iterations()
+inline BOOST_MATH_CONSTEXPR unsigned long get_max_root_iterations() BOOST_NOEXCEPT
 {
    typedef typename Policy::max_root_iterations_type iter_type;
    return iter_type::value;
@@ -875,7 +897,7 @@ namespace detail{
 template <class T, class Digits, class Small, class Default>
 struct series_factor_calc
 {
-   static T get()
+   static T get() BOOST_MATH_NOEXCEPT(T)
    {
       return ldexp(T(1.0), 1 - Digits::value);
    }
@@ -884,7 +906,7 @@ struct series_factor_calc
 template <class T, class Digits>
 struct series_factor_calc<T, Digits, mpl::true_, mpl::true_>
 {
-   static T get()
+   static BOOST_MATH_CONSTEXPR T get() BOOST_MATH_NOEXCEPT(T)
    {
       return boost::math::tools::epsilon<T>();
    }
@@ -892,23 +914,24 @@ struct series_factor_calc<T, Digits, mpl::true_, mpl::true_>
 template <class T, class Digits>
 struct series_factor_calc<T, Digits, mpl::true_, mpl::false_>
 {
-   static T get()
+   BOOST_STATIC_CONSTANT(boost::uintmax_t, v = static_cast<boost::uintmax_t>(1u) << (Digits::value - 1));
+
+   static BOOST_MATH_CONSTEXPR T get() BOOST_MATH_NOEXCEPT(T)
    {
-      static const boost::uintmax_t v = static_cast<boost::uintmax_t>(1u) << (Digits::value - 1);
       return 1 / static_cast<T>(v);
    }
 };
 template <class T, class Digits>
 struct series_factor_calc<T, Digits, mpl::false_, mpl::true_>
 {
-   static T get()
+   static BOOST_MATH_CONSTEXPR T get() BOOST_MATH_NOEXCEPT(T)
    {
       return boost::math::tools::epsilon<T>();
    }
 };
 
 template <class T, class Policy>
-inline T get_epsilon_imp(mpl::true_ const&)
+inline BOOST_MATH_CONSTEXPR T get_epsilon_imp(mpl::true_ const&) BOOST_MATH_NOEXCEPT(T)
 {
 #ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
    BOOST_STATIC_ASSERT( ::std::numeric_limits<T>::is_specialized);
@@ -924,7 +947,7 @@ inline T get_epsilon_imp(mpl::true_ const&)
 }
 
 template <class T, class Policy>
-inline T get_epsilon_imp(mpl::false_ const&)
+inline BOOST_MATH_CONSTEXPR T get_epsilon_imp(mpl::false_ const&) BOOST_MATH_NOEXCEPT(T)
 {
    return tools::epsilon<T>();
 }
@@ -932,7 +955,7 @@ inline T get_epsilon_imp(mpl::false_ const&)
 } // namespace detail
 
 template <class T, class Policy>
-inline T get_epsilon(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T))
+inline BOOST_MATH_CONSTEXPR T get_epsilon(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) BOOST_MATH_NOEXCEPT(T)
 {
    typedef mpl::bool_< (std::numeric_limits<T>::is_specialized && (std::numeric_limits<T>::radix == 2)) > tag_type;
    return detail::get_epsilon_imp<T, Policy>(tag_type());
@@ -973,7 +996,7 @@ struct constructor_error_check
 {
    typedef typename Policy::domain_error_type domain_error_type;
    typedef typename mpl::if_c<
-      (domain_error_type::value == throw_on_error) || (domain_error_type::value == user_error),
+      (domain_error_type::value == throw_on_error) || (domain_error_type::value == user_error) || (domain_error_type::value == errno_on_error),
       mpl::true_,
       mpl::false_>::type type;
 };
@@ -987,10 +1010,33 @@ struct method_error_check
       mpl::false_,
       mpl::true_>::type type;
 };
+//
+// Does the Policy ever throw on error?
+//
+template <class Policy>
+struct is_noexcept_error_policy
+{
+   typedef typename Policy::domain_error_type               t1;
+   typedef typename Policy::pole_error_type                 t2;
+   typedef typename Policy::overflow_error_type             t3;
+   typedef typename Policy::underflow_error_type            t4;
+   typedef typename Policy::denorm_error_type               t5;
+   typedef typename Policy::evaluation_error_type           t6;
+   typedef typename Policy::rounding_error_type             t7;
+   typedef typename Policy::indeterminate_result_error_type t8;
+
+   BOOST_STATIC_CONSTANT(bool, value = 
+      ((t1::value != throw_on_error) && (t1::value != user_error)
+      && (t2::value != throw_on_error) && (t2::value != user_error)
+      && (t3::value != throw_on_error) && (t3::value != user_error)
+      && (t4::value != throw_on_error) && (t4::value != user_error)
+      && (t5::value != throw_on_error) && (t5::value != user_error)
+      && (t6::value != throw_on_error) && (t6::value != user_error)
+      && (t7::value != throw_on_error) && (t7::value != user_error)
+      && (t8::value != throw_on_error) && (t8::value != user_error)));
+};
 
 }}} // namespaces
 
 #endif // BOOST_MATH_POLICY_HPP
 
-
-
index 8e75fae0f2a4bfe77afd1c0048da9d5599bcd4df..0a4e1ac7aa3d47051757abfcf75109a911734ef1 100644 (file)
@@ -80,6 +80,9 @@ is used.
 #if defined(_MSC_VER) || defined(__BORLANDC__)
 #include <float.h>
 #endif
+#ifdef BOOST_MATH_USE_FLOAT128
+#include "quadmath.h"
+#endif
 
 #ifdef BOOST_NO_STDC_NAMESPACE
   namespace std{ using ::abs; using ::fabs; }
@@ -121,7 +124,10 @@ inline bool is_nan_helper(T, const boost::false_type&)
 {
    return false;
 }
-
+#ifdef BOOST_MATH_USE_FLOAT128
+inline bool is_nan_helper(__float128 f, const boost::true_type&) { return ::isnanq(f); }
+inline bool is_nan_helper(__float128 f, const boost::false_type&) { return ::isnanq(f); }
+#endif
 }
 
 namespace math{
@@ -513,6 +519,13 @@ inline bool (isinf)(long double x)
    return detail::isinf_impl(static_cast<value_type>(x), method());
 }
 #endif
+#ifdef BOOST_MATH_USE_FLOAT128
+template<>
+inline bool (isinf)(__float128 x)
+{
+   return ::isinfq(x);
+}
+#endif
 
 //------------------------------------------------------------------------------
 
@@ -598,6 +611,13 @@ inline bool (isnan)(long double x)
    return detail::isnan_impl(x, method());
 }
 #endif
+#ifdef BOOST_MATH_USE_FLOAT128
+template<>
+inline bool (isnan)(__float128 x)
+{
+   return ::isnanq(x);
+}
+#endif
 
 } // namespace math
 } // namespace boost
index 96f60726a6fc49089400c67a63e377d17e3f22b5..ca8e58144e8aa3356dd7b0c4b37a157d2562555e 100644 (file)
@@ -181,19 +181,19 @@ namespace boost
    template <class T>
    typename tools::promote_args<T>::type
          legendre_p(int l, T x);
-
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
    template <class T, class Policy>
    typename boost::enable_if_c<policies::is_policy<Policy>::value, typename tools::promote_args<T>::type>::type
          legendre_p(int l, T x, const Policy& pol);
-
+#endif
    template <class T>
    typename tools::promote_args<T>::type
          legendre_q(unsigned l, T x);
-
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
    template <class T, class Policy>
    typename boost::enable_if_c<policies::is_policy<Policy>::value, typename tools::promote_args<T>::type>::type
          legendre_q(unsigned l, T x, const Policy& pol);
-
+#endif
    template <class T1, class T2, class T3>
    typename tools::promote_args<T1, T2, T3>::type
          legendre_next(unsigned l, unsigned m, T1 x, T2 Pl, T3 Plm1);
@@ -607,8 +607,10 @@ namespace boost
       template <class T1, class T2, class Policy>
       struct bessel_traits
       {
-         typedef typename tools::promote_args<
-            T1, T2
+         typedef typename mpl::if_<
+            is_integral<T1>,
+            typename tools::promote_args<T2>::type,
+            typename tools::promote_args<T1, T2>::type
          >::type result_type;
 
          typedef typename policies::precision<result_type, Policy>::type precision_type;
@@ -994,6 +996,16 @@ namespace boost
    template <class T>
    typename tools::promote_args<T>::type float_advance(const T& val, int distance);
 
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type ulp(const T& val, const Policy& pol);
+   template <class T>
+   typename tools::promote_args<T>::type ulp(const T& val);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type relative_difference(const T&, const U&);
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type epsilon_difference(const T&, const U&);
+
    template<class T>
    T unchecked_bernoulli_b2n(const std::size_t n);
    template <class T, class Policy>
@@ -1447,6 +1459,7 @@ template <class OutputIterator, class T>\
    template <class T> T float_next(const T& a){ return boost::math::float_next(a, Policy()); }\
    template <class T> T float_prior(const T& a){ return boost::math::float_prior(a, Policy()); }\
    template <class T> T float_distance(const T& a, const T& b){ return boost::math::float_distance(a, b, Policy()); }\
+   template <class T> T ulp(const T& a){ return boost::math::ulp(a, Policy()); }\
    \
    template <class RT1, class RT2>\
    inline typename boost::math::tools::promote_args<RT1, RT2>::type owens_t(RT1 a, RT2 z){ return boost::math::owens_t(a, z, Policy()); }\
index e88f578db774fb5f758dc4752724eba6dd597432..ffd0ab43a6be6412d851465983e6677ecb80e084 100644 (file)
@@ -11,6 +11,7 @@
 #endif
 
 #include <boost/config.hpp>
+#include <boost/predef.h>
 #include <boost/cstdint.hpp> // for boost::uintmax_t
 #include <boost/detail/workaround.hpp>
 #include <boost/type_traits/is_integral.hpp>
 //
 #ifdef BOOST_MSVC
 #  define BOOST_MATH_POLY_METHOD 2
+#  define BOOST_MATH_RATIONAL_METHOD 1
 #elif defined(BOOST_INTEL)
 #  define BOOST_MATH_POLY_METHOD 2
-#  define BOOST_MATH_RATIONAL_METHOD 2
+#  define BOOST_MATH_RATIONAL_METHOD 1
 #elif defined(__GNUC__)
+#if __GNUC__ < 4
 #  define BOOST_MATH_POLY_METHOD 3
 #  define BOOST_MATH_RATIONAL_METHOD 3
 #  define BOOST_MATH_INT_TABLE_TYPE(RT, IT) RT
 #  define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##.0L
+#else
+#  define BOOST_MATH_POLY_METHOD 3
+#  define BOOST_MATH_RATIONAL_METHOD 1
+#endif
 #endif
 
 #if defined(BOOST_NO_LONG_LONG) && !defined(BOOST_MATH_INT_TABLE_TYPE)
 #  define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##.0L
 #endif
 
+//
+// constexpr support, early GCC implementations can't cope so disable
+// constexpr for them:
+//
+#if !defined(__clang) && defined(__GNUC__)
+#if (__GNUC__ * 100 + __GNUC_MINOR__) < 490
+#  define BOOST_MATH_DISABLE_CONSTEXPR
+#endif
+#endif
+
+#ifdef BOOST_MATH_DISABLE_CONSTEXPR
+#  define BOOST_MATH_CONSTEXPR
+#else
+#  define BOOST_MATH_CONSTEXPR BOOST_CONSTEXPR
+#endif
+
+//
+// noexcept support:
+//
+#ifndef BOOST_NO_CXX11_NOEXCEPT
+#ifndef BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#include <type_traits>
+#  define BOOST_MATH_NOEXCEPT(T) noexcept(std::is_floating_point<T>::value)
+#  define BOOST_MATH_IS_FLOAT(T) (std::is_floating_point<T>::value)
+#else
+#include <boost/type_traits/is_floating_point.hpp>
+#  define BOOST_MATH_NOEXCEPT(T) noexcept(boost::is_floating_point<T>::value)
+#  define BOOST_MATH_IS_FLOAT(T) (boost::is_floating_point<T>::value)
+#endif
+#else
+#  define BOOST_MATH_NOEXCEPT(T)
+#  define BOOST_MATH_IS_FLOAT(T) false
+#endif
+
 //
 // The maximum order of polynomial that will be evaluated 
 // via an unrolled specialisation:
 //
 #ifndef BOOST_MATH_MAX_POLY_ORDER
-#  define BOOST_MATH_MAX_POLY_ORDER 17
+#  define BOOST_MATH_MAX_POLY_ORDER 20
 #endif 
 //
 // Set the method used to evaluate polynomials and rationals:
 //
 #ifndef BOOST_MATH_POLY_METHOD
-#  define BOOST_MATH_POLY_METHOD 1
+#  define BOOST_MATH_POLY_METHOD 2
 #endif 
 #ifndef BOOST_MATH_RATIONAL_METHOD
-#  define BOOST_MATH_RATIONAL_METHOD 0
+#  define BOOST_MATH_RATIONAL_METHOD 1
 #endif 
 //
 // decide whether to store constants as integers or reals:
 #  define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##SUF
 #endif
 //
-// Test whether to support __float128:
+// Test whether to support __float128, if we don't have quadmath.h then this can't currently work:
+//
+#ifndef BOOST_MATH_USE_FLOAT128
+#ifdef __has_include
+#if ! __has_include("quadmath.h")
+#define BOOST_MATH_DISABLE_FLOAT128
+#endif
+#elif !defined(BOOST_ARCH_X86)
+#define BOOST_MATH_DISABLE_FLOAT128
+#endif
+#endif
+//
+// And then the actual configuration:
 //
 #if defined(_GLIBCXX_USE_FLOAT128) && defined(BOOST_GCC) && !defined(__STRICT_ANSI__) \
    && !defined(BOOST_MATH_DISABLE_FLOAT128) || defined(BOOST_MATH_USE_FLOAT128)
@@ -296,13 +349,13 @@ namespace tools
 {
 
 template <class T>
-inline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c)
+inline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c) BOOST_MATH_NOEXCEPT(T)
 {
    return (std::max)((std::max)(a, b), c);
 }
 
 template <class T>
-inline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c, T d)
+inline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c, T d) BOOST_MATH_NOEXCEPT(T)
 {
    return (std::max)((std::max)(a, b), (std::max)(c, d));
 }
@@ -310,7 +363,7 @@ inline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c, T d)
 } // namespace tools
 
 template <class T>
-void suppress_unused_variable_warning(const T&)
+void suppress_unused_variable_warning(const T&) BOOST_MATH_NOEXCEPT(T)
 {
 }
 
index b3ad2040779e36e4b79e983abc2615647b598ba4..494d7f99e20a132b46c64852cf6292cca4ca478f 100644 (file)
@@ -86,13 +86,20 @@ namespace boost
 
         typedef typename mpl::if_<
           typename mpl::and_<is_floating_point<T1P>, is_floating_point<T2P> >::type, // both T1P and T2P are floating-point?
-          typename mpl::if_< typename mpl::or_<is_same<long double, T1P>, is_same<long double, T2P> >::type, // either long double?
-            long double, // then result type is long double.
-            typename mpl::if_< typename mpl::or_<is_same<double, T1P>, is_same<double, T2P> >::type, // either double?
-            double, // result type is double.
-          float // else result type is float.
-          >::type
-          >::type,
+#ifdef BOOST_MATH_USE_FLOAT128
+           typename mpl::if_< typename mpl::or_<is_same<__float128, T1P>, is_same<__float128, T2P> >::type, // either long double?
+            __float128,
+#endif
+             typename mpl::if_< typename mpl::or_<is_same<long double, T1P>, is_same<long double, T2P> >::type, // either long double?
+               long double, // then result type is long double.
+               typename mpl::if_< typename mpl::or_<is_same<double, T1P>, is_same<double, T2P> >::type, // either double?
+                  double, // result type is double.
+                  float // else result type is float.
+             >::type
+#ifdef BOOST_MATH_USE_FLOAT128
+             >::type
+#endif
+             >::type,
           // else one or the other is a user-defined type:
           typename mpl::if_< typename mpl::and_<mpl::not_<is_floating_point<T2P> >, ::boost::is_convertible<T1P, T2P> >, T2P, T1P>::type>::type type;
       }; // promote_arg2
index 9b854e3014ca58c1513d16a516a6d6693d364b5a..873e60259b8ab524e571919334a18327acf16a4d 100644 (file)
@@ -6,6 +6,8 @@
 #ifndef BOOST_MATH_TOOLS_REAL_CAST_HPP
 #define BOOST_MATH_TOOLS_REAL_CAST_HPP
 
+#include <boost/math/tools/config.hpp>
+
 #ifdef _MSC_VER
 #pragma once
 #endif
@@ -15,7 +17,7 @@ namespace boost{ namespace math
   namespace tools
   {
     template <class To, class T>
-    inline To real_cast(T t)
+    inline BOOST_MATH_CONSTEXPR To real_cast(T t) BOOST_NOEXCEPT_IF(BOOST_MATH_IS_FLOAT(T) && BOOST_MATH_IS_FLOAT(To))
     {
        return static_cast<To>(t);
     }
index 55486e6b457ff8be1989928caca45d585a0f4b31..54aece0b7114c289678120c2cc44d21d5cd17b1f 100644 (file)
@@ -27,6 +27,8 @@
 #include <boost/move/detail/config_begin.hpp>
 #include <boost/move/detail/workaround.hpp>
 
+// @cond
+
 //boost_move_no_copy_constructor_or_assign typedef
 //used to detect noncopyable types for other Boost libraries.
 #if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
@@ -49,6 +51,8 @@
    //
 #endif   //BOOST_NO_CXX11_DELETED_FUNCTIONS
 
+// @endcond
+
 #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)
 
    #include <boost/move/detail/type_traits.hpp>
index a8a61dbd7b04e4cd651e7cbd5fcb537c3bbdead9..323c13af109e2941e44fc7c279ebea7895d3756a 100644 (file)
@@ -332,6 +332,11 @@ struct eval_if
     : if_<C,T1,T2>::type
 {};
 
+
+#if defined(BOOST_GCC) && (BOOST_GCC <= 40000)
+#define BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN
+#endif
+
 template<class T, class U, class R = void>
 struct enable_if_convertible
    : enable_if< is_convertible<T, U>, R>
diff --git a/3rdparty/boost/boost/move/detail/std_ns_begin.hpp b/3rdparty/boost/boost/move/detail/std_ns_begin.hpp
new file mode 100644 (file)
index 0000000..a768e61
--- /dev/null
@@ -0,0 +1,30 @@
+#//////////////////////////////////////////////////////////////////////////////
+#//
+#// (C) Copyright Ion Gaztanaga 2015-2015.
+#// Distributed under the Boost Software License, Version 1.0.
+#// (See accompanying file LICENSE_1_0.txt or copy at
+#// http://www.boost.org/LICENSE_1_0.txt)
+#//
+#// See http://www.boost.org/libs/move for documentation.
+#//
+#//////////////////////////////////////////////////////////////////////////////
+#
+#if defined(_LIBCPP_VERSION)
+   #if defined(__clang__)
+      #define BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH
+      #pragma GCC diagnostic push
+      #pragma GCC diagnostic ignored "-Wc++11-extensions"
+   #endif
+   #define BOOST_MOVE_STD_NS_BEG _LIBCPP_BEGIN_NAMESPACE_STD
+   #define BOOST_MOVE_STD_NS_END _LIBCPP_END_NAMESPACE_STD
+#elif defined(BOOST_GNU_STDLIB) && defined(_GLIBCXX_BEGIN_NAMESPACE_VERSION)  //GCC >= 4.6
+   #define BOOST_MOVE_STD_NS_BEG namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION
+   #define BOOST_MOVE_STD_NS_END _GLIBCXX_END_NAMESPACE_VERSION  } // namespace
+#elif defined(BOOST_GNU_STDLIB) && defined(_GLIBCXX_BEGIN_NAMESPACE)  //GCC >= 4.2
+   #define BOOST_MOVE_STD_NS_BEG _GLIBCXX_BEGIN_NAMESPACE(std)
+   #define BOOST_MOVE_STD_NS_END _GLIBCXX_END_NAMESPACE
+#else
+   #define BOOST_MOVE_STD_NS_BEG namespace std{
+   #define BOOST_MOVE_STD_NS_END }
+#endif
+
diff --git a/3rdparty/boost/boost/move/detail/std_ns_end.hpp b/3rdparty/boost/boost/move/detail/std_ns_end.hpp
new file mode 100644 (file)
index 0000000..0975059
--- /dev/null
@@ -0,0 +1,14 @@
+#//////////////////////////////////////////////////////////////////////////////
+#//
+#// (C) Copyright Ion Gaztanaga 2015-2015.
+#// Distributed under the Boost Software License, Version 1.0.
+#// (See accompanying file LICENSE_1_0.txt or copy at
+#// http://www.boost.org/LICENSE_1_0.txt)
+#//
+#// See http://www.boost.org/libs/move for documentation.
+#//
+#//////////////////////////////////////////////////////////////////////////////
+#ifdef BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH
+   #pragma GCC diagnostic pop
+   #undef BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH
+#endif   //BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH
index ab79fb128be2f281bf34e8ccb8fda486c7e0b941..816fdca7b22bd871b468a9cf9174b8437ffa7531 100644 (file)
@@ -480,7 +480,7 @@ template <class T>
 struct remove_all_extents<T[]>
 {  typedef typename remove_all_extents<T>::type type; };
 
-template <class T, size_t N>
+template <class T, std::size_t N>
 struct remove_all_extents<T[N]>
 {  typedef typename remove_all_extents<T>::type type;};
 
@@ -1003,7 +1003,7 @@ BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x1000)
 
 #else //BOOST_NO_ALIGNMENT
 
-template<class T, size_t Len>
+template<class T, std::size_t Len>
 union aligned_union
 {      
    T aligner;
index 89e4f07f8b8d290f7ed8328b5610958de3e2db4b..7fd1ea14438eb403b99cbfbbe5c2ffa79bb22942 100644 (file)
 
 
       #if defined(BOOST_MOVE_DOXYGEN_INVOKED)
+         //! <b>Effects</b>: Calls `boost::move` if `input_reference` is not a lvalue reference.
+         //!   Otherwise returns the reference
          template <class T> output_reference move_if_not_lvalue_reference(input_reference) noexcept;
       #elif defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)
 
index 345918f9022622ae8f4a15b26cee98673e9fbac2..e7898562df4d75b13f5011ba3cf8929507ce7a70 100644 (file)
@@ -59,7 +59,7 @@ namespace boost { namespace mpl
     #define BOOST_MPL_MULTICHAR_LENGTH(c)                                                           \
       (std::size_t)((c<CHAR_MIN) ? 4 : ((c>0xffffff)+(c>0xffff)+(c>0xff)+1))
 
-    #if defined(BOOST_ENDIAN_LITTLE_BYTE) && defined(__SUNPRO_CC)
+    #if BOOST_ENDIAN_LITTLE_BYTE && defined(__SUNPRO_CC)
 
         #define BOOST_MPL_MULTICHAR_AT(c,i)                                                         \
           (char)(0xff&((unsigned)(c)>>(8*(std::size_t)(i))))
index 87a6c707ce2628e1998ccc8e94a27858921f1d77..db744e58accd63ba5ddf81c74987eb9922b2711d 100644 (file)
 namespace boost {
 
 #ifdef BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
+
 none_t const none = (static_cast<none_t>(0)) ;
-#else
+
+#elif defined BOOST_OPTIONAL_USE_SINGLETON_DEFINITION_OF_NONE
 
 namespace detail { namespace optional_detail {
 
@@ -45,9 +47,13 @@ namespace {
   const none_t& none = detail::optional_detail::none_instance<none_t>::instance; 
 }
 
-#endif
+#else
+
+const none_t none ((none_t::init_tag()));
+
+#endif // older definitions
 
 } // namespace boost
 
-#endif
+#endif // header guard
 
index 13ce455b168948afded3cf33a732e6b4a515274f..608cb0c35487eafc60c4f3247ee27f3199caef28 100644 (file)
 namespace boost {
 
 #ifdef BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
+
 namespace detail { struct none_helper{}; }
 typedef int detail::none_helper::*none_t ;
-#else
+
+#elif defined BOOST_OPTIONAL_USE_SINGLETON_DEFINITION_OF_NONE
+
 class none_t {};
-#endif
+
+#else
+
+struct none_t
+{
+  struct init_tag{};
+  explicit none_t(init_tag){} // to prevent default constructor
+};
+
+#endif // old implementation workarounds
 
 } // namespace boost
 
-#endif
+#endif // header guard
 
index 82c374ebb59e79a21eaa7d94e5aada1b025576c1..ab203304c776baa84767126995e602a0956e3b0d 100644 (file)
 #ifndef BOOST_OPERATORS_HPP
 #define BOOST_OPERATORS_HPP
 
+#include <cstddef>
+#include <iterator>
+
 #include <boost/config.hpp>
-#include <boost/iterator.hpp>
 #include <boost/detail/workaround.hpp>
 
 #if defined(__sgi) && !defined(__GNUC__)
@@ -891,13 +893,13 @@ template <class T,
           class R = V const &>
 struct input_iterator_helper
   : input_iteratable<T, P
-  , boost::iterator<std::input_iterator_tag, V, D, P, R
+  , std::iterator<std::input_iterator_tag, V, D, P, R
     > > {};
 
 template<class T>
 struct output_iterator_helper
   : output_iteratable<T
-  , boost::iterator<std::output_iterator_tag, void, void, void, void
+  , std::iterator<std::output_iterator_tag, void, void, void, void
   > >
 {
   T& operator*()  { return static_cast<T&>(*this); }
@@ -911,7 +913,7 @@ template <class T,
           class R = V&>
 struct forward_iterator_helper
   : forward_iteratable<T, P
-  , boost::iterator<std::forward_iterator_tag, V, D, P, R
+  , std::iterator<std::forward_iterator_tag, V, D, P, R
     > > {};
 
 template <class T,
@@ -921,7 +923,7 @@ template <class T,
           class R = V&>
 struct bidirectional_iterator_helper
   : bidirectional_iteratable<T, P
-  , boost::iterator<std::bidirectional_iterator_tag, V, D, P, R
+  , std::iterator<std::bidirectional_iterator_tag, V, D, P, R
     > > {};
 
 template <class T,
@@ -931,7 +933,7 @@ template <class T,
           class R = V&>
 struct random_access_iterator_helper
   : random_access_iteratable<T, P, D, R
-  , boost::iterator<std::random_access_iterator_tag, V, D, P, R
+  , std::iterator<std::random_access_iterator_tag, V, D, P, R
     > >
 {
   friend D requires_difference_operator(const T& x, const T& y) {
index 36d731fa41de2236fe629751f860a9a16d3b74ac..4965337875dfe6981b60df212f0ea7faaf46d9a6 100644 (file)
@@ -17,6 +17,7 @@ http://www.boost.org/LICENSE_1_0.txt)
 #include <boost/predef/os.h>
 #include <boost/predef/other.h>
 #include <boost/predef/platform.h>
+#include <boost/predef/hardware.h>
 
 #include <boost/predef/version.h>
 
index ccae4950d3e3901588fda39c9fa6a2efd56de431..940e944e2bb5c9fef47693cea9d76e45274cd445 100644 (file)
@@ -8,7 +8,7 @@ http://www.boost.org/LICENSE_1_0.txt)
 #ifndef BOOST_PREDEF_DETAIL__CASSERT_H
 #define BOOST_PREDEF_DETAIL__CASSERT_H
 
-#if defined(__cpluplus)
+#if defined(__cplusplus)
 #include <cassert>
 #else
 #include <assert.h>
index ca58c79d32fe08ab33036a08c8ad4a52624c7602..f5a6687a9faa6a3927827325d7b25d85cee3d580 100644 (file)
@@ -8,7 +8,7 @@ http://www.boost.org/LICENSE_1_0.txt)
 #ifndef BOOST_PREDEF_DETAIL__EXCEPTION_H
 #define BOOST_PREDEF_DETAIL__EXCEPTION_H
 
-#if defined(__cpluplus)
+#if defined(__cplusplus)
 #include <exception>
 #endif
 
diff --git a/3rdparty/boost/boost/predef/hardware.h b/3rdparty/boost/boost/predef/hardware.h
new file mode 100644 (file)
index 0000000..972b73a
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_HARDWARE_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_HARDWARE_H
+#define BOOST_PREDEF_HARDWARE_H
+#endif
+
+#include <boost/predef/hardware/simd.h>
+
+#endif
diff --git a/3rdparty/boost/boost/predef/hardware/simd.h b/3rdparty/boost/boost/predef/hardware/simd.h
new file mode 100644 (file)
index 0000000..4de1e70
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#include <boost/predef/hardware/simd/x86.h>
+#include <boost/predef/hardware/simd/x86_amd.h>
+#include <boost/predef/hardware/simd/arm.h>
+#include <boost/predef/hardware/simd/ppc.h>
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_H
+#define BOOST_PREDEF_HARDWARE_SIMD_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ [section Using the `BOOST_HW_SIMD_*` predefs]
+ [include ../doc/hardware_simd.qbk]
+ [endsect]
+
+ [/ --------------------------- ]
+
+ [section `BOOST_HW_SIMD_*`]
+
+ [heading `BOOST_HW_SIMD`]
+
+ The SIMD extension detected for a specific architectures.
+ Version number depends on the detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`BOOST_HW_SIMD_X86_AVAILABLE`] [__predef_detection__]]
+     [[`BOOST_HW_SIMD_X86_AMD_AVAILABLE`] [__predef_detection__]]
+     [[`BOOST_HW_SIMD_ARM_AVAILABLE`] [__predef_detection__]]
+     [[`BOOST_HW_SIMD_PPC_AVAILABLE`] [__predef_detection__]]
+     ]
+
+ [include ../include/boost/predef/hardware/simd/x86.h]
+ [include ../include/boost/predef/hardware/simd/x86_amd.h]
+ [include ../include/boost/predef/hardware/simd/arm.h]
+ [include ../include/boost/predef/hardware/simd/ppc.h]
+
+ [endsect]
+
+ [/ --------------------------- ]
+
+ [section `BOOST_HW_SIMD_X86_*_VERSION`]
+ [include ../include/boost/predef/hardware/simd/x86/versions.h]
+ [endsect]
+
+ [section `BOOST_HW_SIMD_X86_AMD_*_VERSION`]
+ [include ../include/boost/predef/hardware/simd/x86_amd/versions.h]
+ [endsect]
+
+ [section `BOOST_HW_SIMD_ARM_*_VERSION`]
+ [include ../include/boost/predef/hardware/simd/arm/versions.h]
+ [endsect]
+
+ [section `BOOST_HW_SIMD_PPC_*_VERSION`]
+ [include ../include/boost/predef/hardware/simd/ppc/versions.h]
+ [endsect]
+
+ */
+
+// We check if SIMD extension of multiples architectures have been detected,
+// if yes, then this is an error!
+//
+// NOTE: _X86_AMD implies _X86, so there is no need to check for it here!
+//
+#if defined(BOOST_HW_SIMD_ARM_AVAILABLE) && defined(BOOST_HW_SIMD_PPC_AVAILABLE) ||\
+    defined(BOOST_HW_SIMD_ARM_AVAILABLE) && defined(BOOST_HW_SIMD_X86_AVAILABLE) ||\
+    defined(BOOST_HW_SIMD_PPC_AVAILABLE) && defined(BOOST_HW_SIMD_X86_AVAILABLE)
+#   error "Multiple SIMD architectures detected, this cannot happen!"
+#endif
+
+#if defined(BOOST_HW_SIMD_X86_AVAILABLE)
+#   define BOOST_HW_SIMD BOOST_HW_SIMD_X86
+#endif
+
+#if defined(BOOST_HW_SIMD_X86_AMD_AVAILABLE)
+#   define BOOST_HW_SIMD BOOST_HW_SIMD_X86_AMD
+#endif
+
+#if defined(BOOST_HW_SIMD_ARM_AVAILABLE)
+#   define BOOST_HW_SIMD BOOST_HW_SIMD_ARM
+#endif
+
+#if defined(BOOST_HW_SIMD_PPC_AVAILABLE)
+#   define BOOST_HW_SIMD BOOST_HW_SIMD_PPC
+#endif
+
+#if defined(BOOST_HW_SIMD)
+#   define BOOST_HW_SIMD_AVAILABLE
+#else
+#   define BOOST_HW_SIMD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_NAME "Hardware SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD, BOOST_HW_SIMD_NAME)
diff --git a/3rdparty/boost/boost/predef/hardware/simd/arm.h b/3rdparty/boost/boost/predef/hardware/simd/arm.h
new file mode 100644 (file)
index 0000000..d067c93
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_ARM_H
+#define BOOST_PREDEF_HARDWARE_SIMD_ARM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/hardware/simd/arm/versions.h>
+
+/*`
+ [heading `BOOST_HW_SIMD_ARM`]
+
+ The SIMD extension for ARM (*if detected*).
+ Version number depends on the most recent detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__ARM_NEON__`] [__predef_detection__]]
+     [[`__aarch64__`] [__predef_detection__]]
+     [[`_M_ARM`] [__predef_detection__]]
+     ]
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__ARM_NEON__`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
+     [[`__aarch64__`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
+     [[`_M_ARM`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
+     ]
+
+ */
+
+#define BOOST_HW_SIMD_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#undef BOOST_HW_SIMD_ARM
+#if !defined(BOOST_HW_SIMD_ARM) && (defined(__ARM_NEON__) || defined(__aarch64__) || defined (_M_ARM))
+#   define BOOST_HW_SIMD_ARM BOOST_HW_SIMD_ARM_NEON_VERSION
+#endif
+
+#if !defined(BOOST_HW_SIMD_ARM)
+#   define BOOST_HW_SIMD_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#else
+#   define BOOST_HW_SIMD_ARM_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_ARM_NAME "ARM SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_ARM, BOOST_HW_SIMD_ARM_NAME)
diff --git a/3rdparty/boost/boost/predef/hardware/simd/arm/versions.h b/3rdparty/boost/boost/predef/hardware/simd/arm/versions.h
new file mode 100644 (file)
index 0000000..8425b31
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_ARM_VERSIONS_H
+#define BOOST_PREDEF_HARDWARE_SIMD_ARM_VERSIONS_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ Those defines represent ARM SIMD extensions versions.
+
+ [note You *MUST* compare them with the predef `BOOST_HW_SIMD_ARM`.]
+ */
+
+// ---------------------------------
+
+/*`
+ [heading `BOOST_HW_SIMD_ARM_NEON_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/ARM_architecture#Advanced_SIMD_.28NEON.29 NEON]
+ ARM extension version number.
+
+ Version number is: *1.0.0*.
+ */
+#define BOOST_HW_SIMD_ARM_NEON_VERSION BOOST_VERSION_NUMBER(1, 0, 0)
+
+#endif
diff --git a/3rdparty/boost/boost/predef/hardware/simd/ppc.h b/3rdparty/boost/boost/predef/hardware/simd/ppc.h
new file mode 100644 (file)
index 0000000..eef25c2
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_PPC_H
+#define BOOST_PREDEF_HARDWARE_SIMD_PPC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/hardware/simd/ppc/versions.h>
+
+/*`
+ [heading `BOOST_HW_SIMD_PPC`]
+
+ The SIMD extension for PowerPC (*if detected*).
+ Version number depends on the most recent detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__VECTOR4DOUBLE__`] [__predef_detection__]]
+
+     [[`__ALTIVEC__`] [__predef_detection__]]
+     [[`__VEC__`] [__predef_detection__]]
+
+     [[`__VSX__`] [__predef_detection__]]
+     ]
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__VECTOR4DOUBLE__`] [BOOST_HW_SIMD_PPC_QPX_VERSION]]
+
+     [[`__ALTIVEC__`] [BOOST_HW_SIMD_PPC_VMX_VERSION]]
+     [[`__VEC__`] [BOOST_HW_SIMD_PPC_VMX_VERSION]]
+
+     [[`__VSX__`] [BOOST_HW_SIMD_PPC_VSX_VERSION]]
+     ]
+
+ */
+
+#define BOOST_HW_SIMD_PPC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#undef BOOST_HW_SIMD_PPC
+#if !defined(BOOST_HW_SIMD_PPC) && defined(__VECTOR4DOUBLE__)
+#   define BOOST_HW_SIMD_PPC BOOST_HW_SIMD_PPC_QPX_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_PPC) && defined(__VSX__)
+#   define BOOST_HW_SIMD_PPC BOOST_HW_SIMD_PPC_VSX_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_PPC) && (defined(__ALTIVEC__) || defined(__VEC__))
+#   define BOOST_HW_SIMD_PPC BOOST_HW_SIMD_PPC_VMX_VERSION
+#endif
+
+#if !defined(BOOST_HW_SIMD_PPC)
+#   define BOOST_HW_SIMD_PPC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#else
+#   define BOOST_HW_SIMD_PPC_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_PPC_NAME "PPC SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_PPC, BOOST_HW_SIMD_PPC_NAME)
diff --git a/3rdparty/boost/boost/predef/hardware/simd/ppc/versions.h b/3rdparty/boost/boost/predef/hardware/simd/ppc/versions.h
new file mode 100644 (file)
index 0000000..ffe3f0b
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_PPC_VERSIONS_H
+#define BOOST_PREDEF_HARDWARE_SIMD_PPC_VERSIONS_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ Those defines represent Power PC SIMD extensions versions.
+
+ [note You *MUST* compare them with the predef `BOOST_HW_SIMD_PPC`.]
+ */
+
+// ---------------------------------
+
+/*`
+ [heading `BOOST_HW_SIMD_PPC_VMX_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/AltiVec#VMX128 VMX] powerpc extension
+ version number.
+
+ Version number is: *1.0.0*.
+ */
+#define BOOST_HW_SIMD_PPC_VMX_VERSION BOOST_VERSION_NUMBER(1, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_PPC_VSX_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/AltiVec#VSX VSX] powerpc extension version
+ number.
+
+ Version number is: *1.1.0*.
+ */
+#define BOOST_HW_SIMD_PPC_VSX_VERSION BOOST_VERSION_NUMBER(1, 1, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_PPC_QPX_VERSION`]
+
+ The QPX powerpc extension version number.
+
+ Version number is: *2.0.0*.
+ */
+#define BOOST_HW_SIMD_PPC_QPX_VERSION BOOST_VERSION_NUMBER(2, 0, 0)
+
+#endif
diff --git a/3rdparty/boost/boost/predef/hardware/simd/x86.h b/3rdparty/boost/boost/predef/hardware/simd/x86.h
new file mode 100644 (file)
index 0000000..0874bc4
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_H
+#define BOOST_PREDEF_HARDWARE_SIMD_X86_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/hardware/simd/x86/versions.h>
+
+/*`
+ [heading `BOOST_HW_SIMD_X86`]
+
+ The SIMD extension for x86 (*if detected*).
+ Version number depends on the most recent detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__SSE__`] [__predef_detection__]]
+     [[`_M_X64`] [__predef_detection__]]
+     [[`_M_IX86_FP >= 1`] [__predef_detection__]]
+
+     [[`__SSE2__`] [__predef_detection__]]
+     [[`_M_X64`] [__predef_detection__]]
+     [[`_M_IX86_FP >= 2`] [__predef_detection__]]
+
+     [[`__SSE3__`] [__predef_detection__]]
+
+     [[`__SSSE3__`] [__predef_detection__]]
+
+     [[`__SSE4_1__`] [__predef_detection__]]
+
+     [[`__SSE4_2__`] [__predef_detection__]]
+
+     [[`__AVX__`] [__predef_detection__]]
+
+     [[`__FMA__`] [__predef_detection__]]
+
+     [[`__AVX2__`] [__predef_detection__]]
+     ]
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__SSE__`] [BOOST_HW_SIMD_X86_SSE_VERSION]]
+     [[`_M_X64`] [BOOST_HW_SIMD_X86_SSE_VERSION]]
+     [[`_M_IX86_FP >= 1`] [BOOST_HW_SIMD_X86_SSE_VERSION]]
+
+     [[`__SSE2__`] [BOOST_HW_SIMD_X86_SSE2_VERSION]]
+     [[`_M_X64`] [BOOST_HW_SIMD_X86_SSE2_VERSION]]
+     [[`_M_IX86_FP >= 2`] [BOOST_HW_SIMD_X86_SSE2_VERSION]]
+
+     [[`__SSE3__`] [BOOST_HW_SIMD_X86_SSE3_VERSION]]
+
+     [[`__SSSE3__`] [BOOST_HW_SIMD_X86_SSSE3_VERSION]]
+
+     [[`__SSE4_1__`] [BOOST_HW_SIMD_X86_SSE4_1_VERSION]]
+
+     [[`__SSE4_2__`] [BOOST_HW_SIMD_X86_SSE4_2_VERSION]]
+
+     [[`__AVX__`] [BOOST_HW_SIMD_X86_AVX_VERSION]]
+
+     [[`__FMA__`] [BOOST_HW_SIMD_X86_FMA3_VERSION]]
+
+     [[`__AVX2__`] [BOOST_HW_SIMD_x86_AVX2_VERSION]]
+     ]
+
+ */
+
+#define BOOST_HW_SIMD_X86 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#undef BOOST_HW_SIMD_X86
+#if !defined(BOOST_HW_SIMD_X86) && defined(__MIC__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_MIC_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__AVX2__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_AVX2_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__AVX__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_AVX_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__FMA__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_FMA_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE4_2__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE4_2_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE4_1__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE4_1_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__SSSE3__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSSE3_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE3__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE3_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE2__) || defined(_M_X64) || _M_IX86_FP >= 2)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE2_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE__) || defined(_M_X64) || _M_IX86_FP >= 1)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__MMX__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_MMX_VERSION
+#endif
+
+#if !defined(BOOST_HW_SIMD_X86)
+#   define BOOST_HW_SIMD_X86 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#else
+#   define BOOST_HW_SIMD_X86_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_X86_NAME "x86 SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_X86, BOOST_HW_SIMD_X86_NAME)
diff --git a/3rdparty/boost/boost/predef/hardware/simd/x86/versions.h b/3rdparty/boost/boost/predef/hardware/simd/x86/versions.h
new file mode 100644 (file)
index 0000000..0c7a4d3
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_VERSIONS_H
+#define BOOST_PREDEF_HARDWARE_SIMD_X86_VERSIONS_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ Those defines represent x86 SIMD extensions versions.
+
+ [note You *MUST* compare them with the predef `BOOST_HW_SIMD_X86`.]
+ */
+
+// ---------------------------------
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_MMX_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/MMX_(instruction_set) MMX] x86 extension
+ version number.
+
+ Version number is: *0.99.0*.
+ */
+#define BOOST_HW_SIMD_X86_MMX_VERSION BOOST_VERSION_NUMBER(0, 99, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions SSE] x86 extension
+ version number.
+
+ Version number is: *1.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE_VERSION BOOST_VERSION_NUMBER(1, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE2_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSE2 SSE2] x86 extension version number.
+
+ Version number is: *2.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE2_VERSION BOOST_VERSION_NUMBER(2, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE3_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSE3 SSE3] x86 extension version number.
+
+ Version number is: *3.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE3_VERSION BOOST_VERSION_NUMBER(3, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSSE3_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSSE3 SSSE3] x86 extension version number.
+
+ Version number is: *3.1.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSSE3_VERSION BOOST_VERSION_NUMBER(3, 1, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE4_1_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSE4#SSE4.1 SSE4_1] x86 extension version
+ number.
+
+ Version number is: *4.1.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE4_1_VERSION BOOST_VERSION_NUMBER(4, 1, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE4_2_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSE4##SSE4.2 SSE4_2] x86 extension version
+ number.
+
+ Version number is: *4.2.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE4_2_VERSION BOOST_VERSION_NUMBER(4, 2, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_AVX_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/Advanced_Vector_Extensions AVX] x86
+ extension version number.
+
+ Version number is: *5.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_AVX_VERSION BOOST_VERSION_NUMBER(5, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_FMA3_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/FMA_instruction_set FMA3] x86 extension
+ version number.
+
+ Version number is: *5.2.0*.
+ */
+#define BOOST_HW_SIMD_X86_FMA3_VERSION BOOST_VERSION_NUMBER(5, 2, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_AVX2_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#Advanced_Vector_Extensions_2 AVX2]
+ x86 extension version number.
+
+ Version number is: *5.3.0*.
+ */
+#define BOOST_HW_SIMD_X86_AVX2_VERSION BOOST_VERSION_NUMBER(5, 3, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_MIC_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/Xeon_Phi MIC] (Xeon Phi) x86 extension
+ version number.
+
+ Version number is: *9.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_MIC_VERSION BOOST_VERSION_NUMBER(9, 0, 0)
+
+#endif
diff --git a/3rdparty/boost/boost/predef/hardware/simd/x86_amd.h b/3rdparty/boost/boost/predef/hardware/simd/x86_amd.h
new file mode 100644 (file)
index 0000000..60fd448
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_H
+#define BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/hardware/simd/x86_amd/versions.h>
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_AMD`]
+
+ The SIMD extension for x86 (AMD) (*if detected*).
+ Version number depends on the most recent detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__SSE4A__`] [__predef_detection__]]
+
+     [[`__FMA4__`] [__predef_detection__]]
+
+     [[`__XOP__`] [__predef_detection__]]
+
+     [[`BOOST_HW_SIMD_X86`] [__predef_detection__]]
+     ]
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__SSE4A__`] [BOOST_HW_SIMD_x86_SSE4A_VERSION]]
+
+     [[`__FMA4__`] [BOOST_HW_SIMD_x86_FMA4_VERSION]]
+
+     [[`__XOP__`] [BOOST_HW_SIMD_x86_XOP_VERSION]]
+
+     [[`BOOST_HW_SIMD_X86`] [BOOST_HW_SIMD_x86]]
+     ]
+
+ [note This predef includes every other x86 SIMD extensions and also has other
+ more specific extensions (FMA4, XOP, SSE4a). You should use this predef
+ instead of `BOOST_HW_SIMD_X86` to test if those specific extensions have
+ been detected.]
+
+ */
+
+#define BOOST_HW_SIMD_X86_AMD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+// AMD CPUs also use x86 architecture. We first try to detect if any AMD
+// specific extension are detected, if yes, then try to detect more recent x86
+// common extensions.
+
+#undef BOOST_HW_SIMD_X86_AMD
+#if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__XOP__)
+#   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_XOP_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__FMA4__)
+#   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_FMA4_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__SSE4A__)
+#   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION
+#endif
+
+#if !defined(BOOST_HW_SIMD_X86_AMD)
+#   define BOOST_HW_SIMD_X86_AMD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#else
+    // At this point, we know that we have an AMD CPU, we do need to check for
+    // other x86 extensions to determine the final version number.
+#   include <boost/predef/hardware/simd/x86.h>
+#   if BOOST_HW_SIMD_X86 > BOOST_HW_SIMD_X86_AMD
+#      undef BOOST_HW_SIMD_X86_AMD
+#      define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86
+#   endif
+#   define BOOST_HW_SIMD_X86_AMD_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_X86_AMD_NAME "x86 (AMD) SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_X86_AMD, BOOST_HW_SIMD_X86_AMD_NAME)
diff --git a/3rdparty/boost/boost/predef/hardware/simd/x86_amd/versions.h b/3rdparty/boost/boost/predef/hardware/simd/x86_amd/versions.h
new file mode 100644 (file)
index 0000000..a0a9e91
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_VERSIONS_H
+#define BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_VERSIONS_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ Those defines represent x86 (AMD specific) SIMD extensions versions.
+
+ [note You *MUST* compare them with the predef `BOOST_HW_SIMD_X86_AMD`.]
+ */
+
+
+// ---------------------------------
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE4A_VERSION`]
+
+ [@https://en.wikipedia.org/wiki/SSE4##SSE4A SSE4A] x86 extension (AMD specific).
+
+ Version number is: *4.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION BOOST_VERSION_NUMBER(4, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_XOP_VERSION`]
+
+ [@https://en.wikipedia.org/wiki/XOP_instruction_set XOP] x86 extension (AMD specific).
+
+ Version number is: *5.1.0*.
+ */
+#define BOOST_HW_SIMD_X86_AMD_FMA4_VERSION BOOST_VERSION_NUMBER(5, 1, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_XOP_VERSION`]
+
+ [@https://en.wikipedia.org/wiki/XOP_instruction_set XOP] x86 extension (AMD specific).
+
+ Version number is: *5.1.1*.
+ */
+#define BOOST_HW_SIMD_X86_AMD_XOP_VERSION BOOST_VERSION_NUMBER(5, 1, 1)
+
+
+#endif
index 2fd7d5d80c8d5e21c3eff1999154d9627b4e7b38..62719b4299d843f12bc451ba4584f159796ace6f 100644 (file)
@@ -33,7 +33,7 @@ http://www.boost.org/LICENSE_1_0.txt)
 #endif
  
 #if BOOST_PLAT_WINDOWS_DESKTOP
-#   define BOOST_PLAT_WINDOWS_DESKTOP_AVALIABLE
+#   define BOOST_PLAT_WINDOWS_DESKTOP_AVAILABLE
 #   include <boost/predef/detail/platform_detected.h>
 #endif
 
index 495c9180f9d5a3e955da063d1a63c16144058e6d..df583adc0215dc358acab401d414b425b8d97cf4 100644 (file)
@@ -31,7 +31,7 @@ http://www.boost.org/LICENSE_1_0.txt)
 #endif
  
 #if BOOST_PLAT_WINDOWS_PHONE
-#   define BOOST_PLAT_WINDOWS_PHONE_AVALIABLE
+#   define BOOST_PLAT_WINDOWS_PHONE_AVAILABLE
 #   include <boost/predef/detail/platform_detected.h>
 #endif
 
index 902428e567ad00c4600042b1dc9139b9a6ddf94a..03be5140e9cbe52bbe1e5397d1b0f0e8c05a1784 100644 (file)
@@ -33,7 +33,7 @@ http://www.boost.org/LICENSE_1_0.txt)
 #endif
  
 #if BOOST_PLAT_WINDOWS_RUNTIME
-#   define BOOST_PLAT_WINDOWS_RUNTIME_AVALIABLE
+#   define BOOST_PLAT_WINDOWS_RUNTIME_AVAILABLE
 #   include <boost/predef/detail/platform_detected.h>
 #endif
 
index d65821c5de3bbca39ee3f3e3aad1ff0e5fec4148..a34968b3dd06d6ff250922c7382790edbb4fd663 100644 (file)
@@ -31,7 +31,7 @@ http://www.boost.org/LICENSE_1_0.txt)
 #endif
  
 #if BOOST_PLAT_WINDOWS_STORE
-#   define BOOST_PLAT_WINDOWS_STORE_AVALIABLE
+#   define BOOST_PLAT_WINDOWS_STORE_AVAILABLE
 #   include <boost/predef/detail/platform_detected.h>
 #endif
 
index 1d57cbbf99f84caa99805012bda6b29449f208ee..2fcdefa6948c3848f57369128caab2a405405590 100644 (file)
@@ -10,6 +10,6 @@ http://www.boost.org/LICENSE_1_0.txt)
 
 #include <boost/predef/version_number.h>
 
-#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,3,0)
+#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,4,0)
 
 #endif
index 13ec4cab88421a3e82a118c043606cd41752008f..8a7834d4a504e74b5db8a67de2cac8f6d0cf3d52 100644 (file)
@@ -8,6 +8,7 @@
 #  */
 #
 # /* Revised by Paul Mensonides (2002) */
+# /* Revised by Edward Diener (2015) */
 #
 # /* See http://www.boost.org for most recent version. */
 #
 # define BOOST_PREPROCESSOR_FACILITIES_IDENTITY_HPP
 #
 # include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
 #
 # /* BOOST_PP_IDENTITY */
 #
 # define BOOST_PP_IDENTITY(item) item BOOST_PP_EMPTY
 #
+# define BOOST_PP_IDENTITY_N(item,n) item BOOST_PP_TUPLE_EAT_N(n)
+#
 # endif
diff --git a/3rdparty/boost/boost/preprocessor/list/append.hpp b/3rdparty/boost/boost/preprocessor/list/append.hpp
deleted file mode 100644 (file)
index 26e9d74..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# /* Copyright (C) 2001
-#  * Housemarque Oy
-#  * http://www.housemarque.com
-#  *
-#  * Distributed under the Boost Software License, Version 1.0. (See
-#  * accompanying file LICENSE_1_0.txt or copy at
-#  * http://www.boost.org/LICENSE_1_0.txt)
-#  */
-#
-# /* Revised by Paul Mensonides (2002) */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_LIST_APPEND_HPP
-# define BOOST_PREPROCESSOR_LIST_APPEND_HPP
-#
-# include <boost/preprocessor/config/config.hpp>
-# include <boost/preprocessor/list/fold_right.hpp>
-#
-# /* BOOST_PP_LIST_APPEND */
-#
-# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
-#    define BOOST_PP_LIST_APPEND(a, b) BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_APPEND_O, b, a)
-# else
-#    define BOOST_PP_LIST_APPEND(a, b) BOOST_PP_LIST_APPEND_I(a, b)
-#    define BOOST_PP_LIST_APPEND_I(a, b) BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_APPEND_O, b, a)
-# endif
-#
-# define BOOST_PP_LIST_APPEND_O(d, s, x) (x, s)
-#
-# /* BOOST_PP_LIST_APPEND_D */
-#
-# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
-#    define BOOST_PP_LIST_APPEND_D(d, a, b) BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_APPEND_O, b, a)
-# else
-#    define BOOST_PP_LIST_APPEND_D(d, a, b) BOOST_PP_LIST_APPEND_D_I(d, a, b)
-#    define BOOST_PP_LIST_APPEND_D_I(d, a, b) BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_APPEND_O, b, a)
-# endif
-#
-# endif
diff --git a/3rdparty/boost/boost/preprocessor/list/transform.hpp b/3rdparty/boost/boost/preprocessor/list/transform.hpp
deleted file mode 100644 (file)
index 840f306..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-# /* Copyright (C) 2001
-#  * Housemarque Oy
-#  * http://www.housemarque.com
-#  *
-#  * Distributed under the Boost Software License, Version 1.0. (See
-#  * accompanying file LICENSE_1_0.txt or copy at
-#  * http://www.boost.org/LICENSE_1_0.txt)
-#  */
-#
-# /* Revised by Paul Mensonides (2002) */
-#
-# /* See http://www.boost.org for most recent version. */
-#
-# ifndef BOOST_PREPROCESSOR_LIST_TRANSFORM_HPP
-# define BOOST_PREPROCESSOR_LIST_TRANSFORM_HPP
-#
-# include <boost/preprocessor/config/config.hpp>
-# include <boost/preprocessor/list/fold_right.hpp>
-# include <boost/preprocessor/tuple/elem.hpp>
-# include <boost/preprocessor/tuple/rem.hpp>
-#
-# /* BOOST_PP_LIST_TRANSFORM */
-#
-# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
-#    define BOOST_PP_LIST_TRANSFORM(op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))
-# else
-#    define BOOST_PP_LIST_TRANSFORM(op, data, list) BOOST_PP_LIST_TRANSFORM_I(op, data, list)
-#    define BOOST_PP_LIST_TRANSFORM_I(op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))
-# endif
-#
-# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
-#    define BOOST_PP_LIST_TRANSFORM_O(d, odr, elem) BOOST_PP_LIST_TRANSFORM_O_D(d, BOOST_PP_TUPLE_ELEM(3, 0, odr), BOOST_PP_TUPLE_ELEM(3, 1, odr), BOOST_PP_TUPLE_ELEM(3, 2, odr), elem)
-# else
-#    define BOOST_PP_LIST_TRANSFORM_O(d, odr, elem) BOOST_PP_LIST_TRANSFORM_O_I(d, BOOST_PP_TUPLE_REM_3 odr, elem)
-#    define BOOST_PP_LIST_TRANSFORM_O_I(d, im, elem) BOOST_PP_LIST_TRANSFORM_O_D(d, im, elem)
-# endif
-#
-# define BOOST_PP_LIST_TRANSFORM_O_D(d, op, data, res, elem) (op, data, (op(d, data, elem), res))
-#
-# /* BOOST_PP_LIST_TRANSFORM_D */
-#
-# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
-#    define BOOST_PP_LIST_TRANSFORM_D(d, op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))
-# else
-#    define BOOST_PP_LIST_TRANSFORM_D(d, op, data, list) BOOST_PP_LIST_TRANSFORM_D_I(d, op, data, list)
-#    define BOOST_PP_LIST_TRANSFORM_D_I(d, op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))
-# endif
-#
-# endif
index 708015e140130eeff8ac91556c1c8302916fb6f2..7e8a1006758c9f9ab4a1a2dfb5128d146220265e 100644 (file)
@@ -8,7 +8,7 @@
 #  */
 #
 # /* Revised by Paul Mensonides (2002-2011) */
-# /* Revised by Edward Diener (2011) */
+# /* Revised by Edward Diener (2011,2015) */
 #
 # /* See http://www.boost.org for most recent version. */
 #
 #    endif
 #    define BOOST_PP_TUPLE_EAT_I(size) BOOST_PP_TUPLE_EAT_ ## size
 # endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#     define BOOST_PP_TUPLE_EAT_N(size) BOOST_PP_TUPLE_EAT_N_I(size)
+# else
+#     define BOOST_PP_TUPLE_EAT_N(size) BOOST_PP_TUPLE_EAT_N_OO((size))
+#     define BOOST_PP_TUPLE_EAT_N_OO(par) BOOST_PP_TUPLE_EAT_N_I ## par
+# endif
+# define BOOST_PP_TUPLE_EAT_N_I(size) BOOST_PP_TUPLE_EAT_ ## size
+#
 # define BOOST_PP_TUPLE_EAT_1(e0)
 # define BOOST_PP_TUPLE_EAT_2(e0, e1)
 # define BOOST_PP_TUPLE_EAT_3(e0, e1, e2)
index 7e6cc51969ae0c7b0a6db81bb54be9620e766787..4fd1fd94a858cdb6adc6422a060f99781113339a 100644 (file)
@@ -25,6 +25,7 @@
 #if defined(__BORLANDC__)
 #  include <boost/regex/config/borland.hpp>
 #endif
+#include <boost/version.hpp>
 
 /*****************************************************************************
  *
@@ -41,6 +42,7 @@
 #  include BOOST_REGEX_USER_CONFIG
 
 #  include <boost/config.hpp>
+#  include <boost/predef.h>
 
 #else
    /*
 #define UNICODE
 #endif
 
+
+/*
+* Define a macro for the namespace that details are placed in, this includes the Boost
+* version number to avoid mismatched header and library versions:
+*/
+#define BOOST_REGEX_DETAIL_NS BOOST_JOIN(re_detail_, BOOST_VERSION)
+
 /*
  * Fix for gcc prior to 3.4: std::ctype<wchar_t> doesn't allow
  * masks to be combined, for example:
 #if defined(_MSC_VER) && !defined(_MSC_EXTENSIONS)
 #  define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
 #endif
-/*
+ /*
+ * Oracle compiler in C++11 mode doesn't like external templates for some reason:
+ */
+#ifdef __SUNPRO_CC
+#  define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+#endif
+ /*
  * Shared regex lib will crash without this, frankly it looks a lot like a gcc bug:
  */
 #if defined(__MINGW32__)
 
 /* disable our own file-iterators and mapfiles if we can't
  * support them: */
-#if !defined(BOOST_HAS_DIRENT_H) && !(defined(_WIN32) && !defined(BOOST_REGEX_NO_W32))
-#  define BOOST_REGEX_NO_FILEITER
+#if defined(_WIN32)
+#  if defined(BOOST_REGEX_NO_W32) || BOOST_PLAT_WINDOWS_STORE
+#    define BOOST_REGEX_NO_FILEITER
+#  endif
+#else // defined(_WIN32)
+#  if !defined(BOOST_HAS_DIRENT_H)
+#    define BOOST_REGEX_NO_FILEITER
+#  endif
 #endif
 
 /* backwards compatibitity: */
  * with MSVC and the /Zc:wchar_t option we place some extra unsigned short versions
  * of the non-inline functions in the library, so that users can still link to the lib,
  * irrespective of whether their own code is built with /Zc:wchar_t.
- * Note that this does NOT WORK with VC10 when the C++ locale is in effect as
+ * Note that this does NOT WORK with VC10 and VC14 when the C++ locale is in effect as
  * the locale's <unsigned short> facets simply do not compile in that case.
+ * As we default to the C++ locale when compiling for the windows runtime we
+ * skip in this case aswell.
  */
-#if defined(__cplusplus) && (defined(BOOST_MSVC) || defined(__ICL)) && !defined(BOOST_NO_INTRINSIC_WCHAR_T) && defined(BOOST_WINDOWS) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) && !defined(BOOST_RWSTD_VER) && ((_MSC_VER < 1600) || !defined(BOOST_REGEX_USE_CPP_LOCALE))
+#if defined(__cplusplus) && \
+      (defined(BOOST_MSVC) || defined(__ICL)) && \
+      !defined(BOOST_NO_INTRINSIC_WCHAR_T) && \
+      defined(BOOST_WINDOWS) && \
+      !defined(__SGI_STL_PORT) && \
+      !defined(_STLPORT_VERSION) && \
+      !defined(BOOST_RWSTD_VER) && \
+      ((_MSC_VER < 1600) || !defined(BOOST_REGEX_USE_CPP_LOCALE)) && \
+      !BOOST_PLAT_WINDOWS_RUNTIME
 #  define BOOST_REGEX_HAS_OTHER_WCHAR_T
 #  ifdef BOOST_MSVC
 #     pragma warning(push)
 #  define BOOST_REGEX_USE_C_LOCALE
 #endif
 
+/* use C++ locale when targeting windows store */
+#if BOOST_PLAT_WINDOWS_RUNTIME
+#  define BOOST_REGEX_USE_CPP_LOCALE
+#  define BOOST_REGEX_NO_WIN32_LOCALE
+#endif
+
 /* Win32 defaults to native Win32 locale: */
-#if defined(_WIN32) && !defined(BOOST_REGEX_USE_WIN32_LOCALE) && !defined(BOOST_REGEX_USE_C_LOCALE) && !defined(BOOST_REGEX_USE_CPP_LOCALE) && !defined(BOOST_REGEX_NO_W32)
+#if defined(_WIN32) && \
+    !defined(BOOST_REGEX_USE_WIN32_LOCALE) && \
+    !defined(BOOST_REGEX_USE_C_LOCALE) && \
+    !defined(BOOST_REGEX_USE_CPP_LOCALE) && \
+    !defined(BOOST_REGEX_NO_W32) && \
+    !defined(BOOST_REGEX_NO_WIN32_LOCALE)
 #  define BOOST_REGEX_USE_WIN32_LOCALE
 #endif
 /* otherwise use C++ locale if supported: */
@@ -334,7 +376,7 @@ if(0 == (x))\
 #if defined(__cplusplus) && defined(BOOST_REGEX_HAS_MS_STACK_GUARD)
 
 namespace boost{
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 BOOST_REGEX_DECL void BOOST_REGEX_CALL reset_stack_guard_page();
 
@@ -387,7 +429,7 @@ BOOST_REGEX_DECL void BOOST_REGEX_CALL reset_stack_guard_page();
  ****************************************************************************/
 
 #if defined(__cplusplus) && defined(BOOST_REGEX_NON_RECURSIVE)
-namespace boost{ namespace re_detail{
+namespace boost{ namespace BOOST_REGEX_DETAIL_NS{
 
 BOOST_REGEX_DECL void* BOOST_REGEX_CALL get_mem_block();
 BOOST_REGEX_DECL void BOOST_REGEX_CALL put_mem_block(void*);
index 572172e542491081bcee0d834f86d3c8e2600126..a70aa0da8145e413b8da2f2ffe1fffc5c88fa1fe 100644 (file)
@@ -34,7 +34,7 @@
 
 namespace boost{
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 // 
 // Implementation details:
@@ -108,18 +108,18 @@ public:
    struct boost_extensions_tag{};
 
    icu_regex_traits()
-      : m_pimpl(re_detail::get_icu_regex_traits_implementation(U_NAMESPACE_QUALIFIER Locale()))
+      : m_pimpl(BOOST_REGEX_DETAIL_NS::get_icu_regex_traits_implementation(U_NAMESPACE_QUALIFIER Locale()))
    {
    }
    static size_type length(const char_type* p);
 
    ::boost::regex_constants::syntax_type syntax_type(char_type c)const
    {
-      return ((c < 0x7f) && (c > 0)) ? re_detail::get_default_syntax_type(static_cast<char>(c)) : regex_constants::syntax_char;
+      return ((c < 0x7f) && (c > 0)) ? BOOST_REGEX_DETAIL_NS::get_default_syntax_type(static_cast<char>(c)) : regex_constants::syntax_char;
    }
    ::boost::regex_constants::escape_syntax_type escape_syntax_type(char_type c) const
    {
-      return ((c < 0x7f) && (c > 0)) ? re_detail::get_default_escape_syntax_type(static_cast<char>(c)) : regex_constants::syntax_char;
+      return ((c < 0x7f) && (c > 0)) ? BOOST_REGEX_DETAIL_NS::get_default_escape_syntax_type(static_cast<char>(c)) : regex_constants::syntax_char;
    }
    char_type translate(char_type c) const
    {
@@ -154,7 +154,7 @@ public:
    bool isctype(char_type c, char_class_type f) const;
    int toi(const char_type*& p1, const char_type* p2, int radix)const
    {
-      return re_detail::global_toi(p1, p2, radix, *this);
+      return BOOST_REGEX_DETAIL_NS::global_toi(p1, p2, radix, *this);
    }
    int value(char_type c, int radix)const
    {
@@ -163,7 +163,7 @@ public:
    locale_type imbue(locale_type l)
    {
       locale_type result(m_pimpl->getloc());
-      m_pimpl = re_detail::get_icu_regex_traits_implementation(l);
+      m_pimpl = BOOST_REGEX_DETAIL_NS::get_icu_regex_traits_implementation(l);
       return result;
    }
    locale_type getloc()const
@@ -172,7 +172,7 @@ public:
    }
    std::string error_string(::boost::regex_constants::error_type n) const
    {
-      return re_detail::get_default_error_string(n);
+      return BOOST_REGEX_DETAIL_NS::get_default_error_string(n);
    }
 private:
    icu_regex_traits(const icu_regex_traits&);
@@ -208,7 +208,7 @@ private:
 
    static char_class_type lookup_icu_mask(const ::UChar32* p1, const ::UChar32* p2);
 
-   boost::shared_ptr< ::boost::re_detail::icu_regex_traits_implementation> m_pimpl;
+   boost::shared_ptr< ::boost::BOOST_REGEX_DETAIL_NS::icu_regex_traits_implementation> m_pimpl;
 };
 
 } // namespace boost
@@ -241,7 +241,7 @@ typedef match_results<const ::UChar*> u16match;
 //
 // Construction of 32-bit regex types from UTF-8 and UTF-16 primitives:
 //
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 #if !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__)
 template <class InputIterator>
@@ -341,18 +341,18 @@ inline u32regex make_u32regex(InputIterator i,
                               InputIterator j, 
                               boost::regex_constants::syntax_option_type opt)
 {
-   return re_detail::do_make_u32regex(i, j, opt, static_cast<boost::mpl::int_<sizeof(*i)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_make_u32regex(i, j, opt, static_cast<boost::mpl::int_<sizeof(*i)> const*>(0));
 }
 //
 // construction from UTF-8 nul-terminated strings:
 //
 inline u32regex make_u32regex(const char* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
 {
-   return re_detail::do_make_u32regex(p, p + std::strlen(p), opt, static_cast<boost::mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + std::strlen(p), opt, static_cast<boost::mpl::int_<1> const*>(0));
 }
 inline u32regex make_u32regex(const unsigned char* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
 {
-   return re_detail::do_make_u32regex(p, p + std::strlen(reinterpret_cast<const char*>(p)), opt, static_cast<boost::mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + std::strlen(reinterpret_cast<const char*>(p)), opt, static_cast<boost::mpl::int_<1> const*>(0));
 }
 //
 // construction from UTF-16 nul-terminated strings:
@@ -360,13 +360,13 @@ inline u32regex make_u32regex(const unsigned char* p, boost::regex_constants::sy
 #ifndef BOOST_NO_WREGEX
 inline u32regex make_u32regex(const wchar_t* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
 {
-   return re_detail::do_make_u32regex(p, p + std::wcslen(p), opt, static_cast<boost::mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + std::wcslen(p), opt, static_cast<boost::mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
 #if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)
 inline u32regex make_u32regex(const UChar* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
 {
-   return re_detail::do_make_u32regex(p, p + u_strlen(p), opt, static_cast<boost::mpl::int_<2> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + u_strlen(p), opt, static_cast<boost::mpl::int_<2> const*>(0));
 }
 #endif
 //
@@ -375,20 +375,20 @@ inline u32regex make_u32regex(const UChar* p, boost::regex_constants::syntax_opt
 template<class C, class T, class A>
 inline u32regex make_u32regex(const std::basic_string<C, T, A>& s, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
 {
-   return re_detail::do_make_u32regex(s.begin(), s.end(), opt, static_cast<boost::mpl::int_<sizeof(C)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_make_u32regex(s.begin(), s.end(), opt, static_cast<boost::mpl::int_<sizeof(C)> const*>(0));
 }
 //
 // Construction from ICU string type:
 //
 inline u32regex make_u32regex(const U_NAMESPACE_QUALIFIER UnicodeString& s, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
 {
-   return re_detail::do_make_u32regex(s.getBuffer(), s.getBuffer() + s.length(), opt, static_cast<boost::mpl::int_<2> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_make_u32regex(s.getBuffer(), s.getBuffer() + s.length(), opt, static_cast<boost::mpl::int_<2> const*>(0));
 }
 
 //
 // regex_match overloads that widen the character type as appropriate:
 //
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 template<class MR1, class MR2>
 void copy_results(MR1& out, MR2 const& in)
 {
@@ -446,7 +446,7 @@ bool do_regex_match(BidiIterator first, BidiIterator last,
    if(result) copy_results(m, what);
    return result;
 }
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 
 template <class BidiIterator, class Allocator>
 inline bool u32regex_match(BidiIterator first, BidiIterator last, 
@@ -454,14 +454,14 @@ inline bool u32regex_match(BidiIterator first, BidiIterator last,
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_match(first, last, m, e, flags, static_cast<mpl::int_<sizeof(*first)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(first, last, m, e, flags, static_cast<mpl::int_<sizeof(*first)> const*>(0));
 }
 inline bool u32regex_match(const UChar* p, 
                  match_results<const UChar*>& m, 
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_match(p, p+u_strlen(p), m, e, flags, static_cast<mpl::int_<2> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+u_strlen(p), m, e, flags, static_cast<mpl::int_<2> const*>(0));
 }
 #if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) && !defined(BOOST_NO_WREGEX)
 inline bool u32regex_match(const wchar_t* p, 
@@ -469,7 +469,7 @@ inline bool u32regex_match(const wchar_t* p,
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_match(p, p+std::wcslen(p), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+std::wcslen(p), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
 inline bool u32regex_match(const char* p, 
@@ -477,21 +477,21 @@ inline bool u32regex_match(const char* p,
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_match(p, p+std::strlen(p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+std::strlen(p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
 }
 inline bool u32regex_match(const unsigned char* p, 
                  match_results<const unsigned char*>& m, 
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_match(p, p+std::strlen((const char*)p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+std::strlen((const char*)p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
 }
 inline bool u32regex_match(const std::string& s, 
                         match_results<std::string::const_iterator>& m, 
                         const u32regex& e, 
                         match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<1> const*>(0));
 }
 #ifndef BOOST_NO_STD_WSTRING
 inline bool u32regex_match(const std::wstring& s, 
@@ -499,7 +499,7 @@ inline bool u32regex_match(const std::wstring& s,
                         const u32regex& e, 
                         match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
 inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s, 
@@ -507,7 +507,7 @@ inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s,
                         const u32regex& e, 
                         match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 //
 // regex_match overloads that do not return what matched:
@@ -518,14 +518,14 @@ inline bool u32regex_match(BidiIterator first, BidiIterator last,
                  match_flag_type flags = match_default)
 {
    match_results<BidiIterator> m;
-   return re_detail::do_regex_match(first, last, m, e, flags, static_cast<mpl::int_<sizeof(*first)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(first, last, m, e, flags, static_cast<mpl::int_<sizeof(*first)> const*>(0));
 }
 inline bool u32regex_match(const UChar* p, 
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
    match_results<const UChar*> m;
-   return re_detail::do_regex_match(p, p+u_strlen(p), m, e, flags, static_cast<mpl::int_<2> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+u_strlen(p), m, e, flags, static_cast<mpl::int_<2> const*>(0));
 }
 #if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) && !defined(BOOST_NO_WREGEX)
 inline bool u32regex_match(const wchar_t* p, 
@@ -533,7 +533,7 @@ inline bool u32regex_match(const wchar_t* p,
                  match_flag_type flags = match_default)
 {
    match_results<const wchar_t*> m;
-   return re_detail::do_regex_match(p, p+std::wcslen(p), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+std::wcslen(p), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
 inline bool u32regex_match(const char* p, 
@@ -541,21 +541,21 @@ inline bool u32regex_match(const char* p,
                  match_flag_type flags = match_default)
 {
    match_results<const char*> m;
-   return re_detail::do_regex_match(p, p+std::strlen(p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+std::strlen(p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
 }
 inline bool u32regex_match(const unsigned char* p, 
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
    match_results<const unsigned char*> m;
-   return re_detail::do_regex_match(p, p+std::strlen((const char*)p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p+std::strlen((const char*)p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
 }
 inline bool u32regex_match(const std::string& s, 
                         const u32regex& e, 
                         match_flag_type flags = match_default)
 {
    match_results<std::string::const_iterator> m;
-   return re_detail::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<1> const*>(0));
 }
 #ifndef BOOST_NO_STD_WSTRING
 inline bool u32regex_match(const std::wstring& s, 
@@ -563,7 +563,7 @@ inline bool u32regex_match(const std::wstring& s,
                         match_flag_type flags = match_default)
 {
    match_results<std::wstring::const_iterator> m;
-   return re_detail::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
 inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s, 
@@ -571,13 +571,13 @@ inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s,
                         match_flag_type flags = match_default)
 {
    match_results<const UChar*> m;
-   return re_detail::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 
 //
 // regex_search overloads that widen the character type as appropriate:
 //
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 template <class BidiIterator, class Allocator>
 inline bool do_regex_search(BidiIterator first, BidiIterator last, 
                  match_results<BidiIterator, Allocator>& m, 
@@ -630,7 +630,7 @@ inline bool u32regex_search(BidiIterator first, BidiIterator last,
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_search(first, last, m, e, flags, first, static_cast<mpl::int_<sizeof(*first)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(first, last, m, e, flags, first, static_cast<mpl::int_<sizeof(*first)> const*>(0));
 }
 template <class BidiIterator, class Allocator>
 inline bool u32regex_search(BidiIterator first, BidiIterator last, 
@@ -639,14 +639,14 @@ inline bool u32regex_search(BidiIterator first, BidiIterator last,
                  match_flag_type flags,
                  BidiIterator base)
 {
-   return re_detail::do_regex_search(first, last, m, e, flags, base, static_cast<mpl::int_<sizeof(*first)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(first, last, m, e, flags, base, static_cast<mpl::int_<sizeof(*first)> const*>(0));
 }
 inline bool u32regex_search(const UChar* p, 
                  match_results<const UChar*>& m, 
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_search(p, p+u_strlen(p), m, e, flags, p, static_cast<mpl::int_<2> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+u_strlen(p), m, e, flags, p, static_cast<mpl::int_<2> const*>(0));
 }
 #if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) && !defined(BOOST_NO_WREGEX)
 inline bool u32regex_search(const wchar_t* p, 
@@ -654,7 +654,7 @@ inline bool u32regex_search(const wchar_t* p,
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_search(p, p+std::wcslen(p), m, e, flags, p, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+std::wcslen(p), m, e, flags, p, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
 inline bool u32regex_search(const char* p, 
@@ -662,21 +662,21 @@ inline bool u32regex_search(const char* p,
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_search(p, p+std::strlen(p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+std::strlen(p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
 }
 inline bool u32regex_search(const unsigned char* p, 
                  match_results<const unsigned char*>& m, 
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_search(p, p+std::strlen((const char*)p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+std::strlen((const char*)p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
 }
 inline bool u32regex_search(const std::string& s, 
                         match_results<std::string::const_iterator>& m, 
                         const u32regex& e, 
                         match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<1> const*>(0));
 }
 #ifndef BOOST_NO_STD_WSTRING
 inline bool u32regex_search(const std::wstring& s, 
@@ -684,7 +684,7 @@ inline bool u32regex_search(const std::wstring& s,
                         const u32regex& e, 
                         match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
 inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s, 
@@ -692,7 +692,7 @@ inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s,
                         const u32regex& e, 
                         match_flag_type flags = match_default)
 {
-   return re_detail::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 template <class BidiIterator>
 inline bool u32regex_search(BidiIterator first, BidiIterator last, 
@@ -700,14 +700,14 @@ inline bool u32regex_search(BidiIterator first, BidiIterator last,
                  match_flag_type flags = match_default)
 {
    match_results<BidiIterator> m;
-   return re_detail::do_regex_search(first, last, m, e, flags, first, static_cast<mpl::int_<sizeof(*first)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(first, last, m, e, flags, first, static_cast<mpl::int_<sizeof(*first)> const*>(0));
 }
 inline bool u32regex_search(const UChar* p, 
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
    match_results<const UChar*> m;
-   return re_detail::do_regex_search(p, p+u_strlen(p), m, e, flags, p, static_cast<mpl::int_<2> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+u_strlen(p), m, e, flags, p, static_cast<mpl::int_<2> const*>(0));
 }
 #if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) && !defined(BOOST_NO_WREGEX)
 inline bool u32regex_search(const wchar_t* p, 
@@ -715,7 +715,7 @@ inline bool u32regex_search(const wchar_t* p,
                  match_flag_type flags = match_default)
 {
    match_results<const wchar_t*> m;
-   return re_detail::do_regex_search(p, p+std::wcslen(p), m, e, flags, p, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+std::wcslen(p), m, e, flags, p, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
 inline bool u32regex_search(const char* p, 
@@ -723,21 +723,21 @@ inline bool u32regex_search(const char* p,
                  match_flag_type flags = match_default)
 {
    match_results<const char*> m;
-   return re_detail::do_regex_search(p, p+std::strlen(p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+std::strlen(p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
 }
 inline bool u32regex_search(const unsigned char* p, 
                  const u32regex& e, 
                  match_flag_type flags = match_default)
 {
    match_results<const unsigned char*> m;
-   return re_detail::do_regex_search(p, p+std::strlen((const char*)p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p+std::strlen((const char*)p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
 }
 inline bool u32regex_search(const std::string& s, 
                         const u32regex& e, 
                         match_flag_type flags = match_default)
 {
    match_results<std::string::const_iterator> m;
-   return re_detail::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<1> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<1> const*>(0));
 }
 #ifndef BOOST_NO_STD_WSTRING
 inline bool u32regex_search(const std::wstring& s, 
@@ -745,7 +745,7 @@ inline bool u32regex_search(const std::wstring& s,
                         match_flag_type flags = match_default)
 {
    match_results<std::wstring::const_iterator> m;
-   return re_detail::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 #endif
 inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s, 
@@ -753,13 +753,13 @@ inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s,
                         match_flag_type flags = match_default)
 {
    match_results<const UChar*> m;
-   return re_detail::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+   return BOOST_REGEX_DETAIL_NS::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
 }
 
 //
 // overloads for regex_replace with utf-8 and utf-16 data types:
 //
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 template <class I>
 inline std::pair< boost::u8_to_u32_iterator<I>, boost::u8_to_u32_iterator<I> >
    make_utf32_seq(I i, I j, mpl::int_<1> const*)
@@ -838,7 +838,7 @@ OutputIterator do_regex_replace(OutputIterator out,
    if(i == j)
    {
       if(!(flags & regex_constants::format_no_copy))
-         out = re_detail::copy(in.first, in.second, out);
+         out = BOOST_REGEX_DETAIL_NS::copy(in.first, in.second, out);
    }
    else
    {
@@ -846,18 +846,18 @@ OutputIterator do_regex_replace(OutputIterator out,
       while(i != j)
       {
          if(!(flags & regex_constants::format_no_copy))
-            out = re_detail::copy(i->prefix().first, i->prefix().second, out); 
+            out = BOOST_REGEX_DETAIL_NS::copy(i->prefix().first, i->prefix().second, out); 
          if(f.size())
-            out = ::boost::re_detail::regex_format_imp(out, *i, &*f.begin(), &*f.begin() + f.size(), flags, e.get_traits());
+            out = ::boost::BOOST_REGEX_DETAIL_NS::regex_format_imp(out, *i, &*f.begin(), &*f.begin() + f.size(), flags, e.get_traits());
          else
-            out = ::boost::re_detail::regex_format_imp(out, *i, static_cast<UChar32 const*>(0), static_cast<UChar32 const*>(0), flags, e.get_traits());
+            out = ::boost::BOOST_REGEX_DETAIL_NS::regex_format_imp(out, *i, static_cast<UChar32 const*>(0), static_cast<UChar32 const*>(0), flags, e.get_traits());
          last_m = (*i)[0].second;
          if(flags & regex_constants::format_first_only)
             break;
          ++i;
       }
       if(!(flags & regex_constants::format_no_copy))
-         out = re_detail::copy(last_m, in.second, out);
+         out = BOOST_REGEX_DETAIL_NS::copy(last_m, in.second, out);
    }
    return out;
 }
@@ -876,7 +876,7 @@ inline BaseIterator extract_output_base(const utf16_output_iterator<BaseIterator
 {
    return b.base();
 }
-}  // re_detail
+}  // BOOST_REGEX_DETAIL_NS
 
 template <class OutputIterator, class BidirectionalIterator, class charT>
 inline OutputIterator u32regex_replace(OutputIterator out,
@@ -886,13 +886,13 @@ inline OutputIterator u32regex_replace(OutputIterator out,
                          const charT* fmt, 
                          match_flag_type flags = match_default)
 {
-   return re_detail::extract_output_base
+   return BOOST_REGEX_DETAIL_NS::extract_output_base
     (
-      re_detail::do_regex_replace(
-         re_detail::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
-         re_detail::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
+      BOOST_REGEX_DETAIL_NS::do_regex_replace(
+         BOOST_REGEX_DETAIL_NS::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
+         BOOST_REGEX_DETAIL_NS::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
          e,
-         re_detail::make_utf32_seq(fmt, static_cast<mpl::int_<sizeof(*fmt)> const*>(0)),
+         BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt, static_cast<mpl::int_<sizeof(*fmt)> const*>(0)),
          flags)
       );
 }
@@ -905,13 +905,13 @@ inline OutputIterator u32regex_replace(OutputIterator out,
                          const std::basic_string<charT>& fmt,
                          match_flag_type flags = match_default)
 {
-   return re_detail::extract_output_base
+   return BOOST_REGEX_DETAIL_NS::extract_output_base
     (
-      re_detail::do_regex_replace(
-         re_detail::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
-         re_detail::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
+      BOOST_REGEX_DETAIL_NS::do_regex_replace(
+         BOOST_REGEX_DETAIL_NS::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
+         BOOST_REGEX_DETAIL_NS::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
          e,
-         re_detail::make_utf32_seq(fmt.begin(), fmt.end(), static_cast<mpl::int_<sizeof(charT)> const*>(0)),
+         BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt.begin(), fmt.end(), static_cast<mpl::int_<sizeof(charT)> const*>(0)),
          flags)
       );
 }
@@ -924,13 +924,13 @@ inline OutputIterator u32regex_replace(OutputIterator out,
                          const U_NAMESPACE_QUALIFIER UnicodeString& fmt,
                          match_flag_type flags = match_default)
 {
-   return re_detail::extract_output_base
+   return BOOST_REGEX_DETAIL_NS::extract_output_base
    (
-      re_detail::do_regex_replace(
-         re_detail::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
-         re_detail::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
+      BOOST_REGEX_DETAIL_NS::do_regex_replace(
+         BOOST_REGEX_DETAIL_NS::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
+         BOOST_REGEX_DETAIL_NS::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
          e,
-         re_detail::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast<mpl::int_<2> const*>(0)),
+         BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast<mpl::int_<2> const*>(0)),
          flags)
       );
 }
@@ -942,7 +942,7 @@ std::basic_string<charT> u32regex_replace(const std::basic_string<charT>& s,
                          match_flag_type flags = match_default)
 {
    std::basic_string<charT> result;
-   re_detail::string_out_iterator<std::basic_string<charT> > i(result);
+   BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<charT> > i(result);
    u32regex_replace(i, s.begin(), s.end(), e, fmt, flags);
    return result;
 }
@@ -954,12 +954,12 @@ std::basic_string<charT> u32regex_replace(const std::basic_string<charT>& s,
                          match_flag_type flags = match_default)
 {
    std::basic_string<charT> result;
-   re_detail::string_out_iterator<std::basic_string<charT> > i(result);
+   BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<charT> > i(result);
    u32regex_replace(i, s.begin(), s.end(), e, fmt.c_str(), flags);
    return result;
 }
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 class unicode_string_out_iterator
 {
@@ -989,7 +989,7 @@ inline U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QU
                          match_flag_type flags = match_default)
 {
    U_NAMESPACE_QUALIFIER UnicodeString result;
-   re_detail::unicode_string_out_iterator i(result);
+   BOOST_REGEX_DETAIL_NS::unicode_string_out_iterator i(result);
    u32regex_replace(i, s.getBuffer(), s.getBuffer()+s.length(), e, fmt, flags);
    return result;
 }
@@ -1000,12 +1000,12 @@ inline U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QU
                          match_flag_type flags = match_default)
 {
    U_NAMESPACE_QUALIFIER UnicodeString result;
-   re_detail::unicode_string_out_iterator i(result);
-   re_detail::do_regex_replace(
-         re_detail::make_utf32_out(i, static_cast<mpl::int_<2> const*>(0)),
-         re_detail::make_utf32_seq(s.getBuffer(), s.getBuffer()+s.length(), static_cast<mpl::int_<2> const*>(0)),
+   BOOST_REGEX_DETAIL_NS::unicode_string_out_iterator i(result);
+   BOOST_REGEX_DETAIL_NS::do_regex_replace(
+         BOOST_REGEX_DETAIL_NS::make_utf32_out(i, static_cast<mpl::int_<2> const*>(0)),
+         BOOST_REGEX_DETAIL_NS::make_utf32_seq(s.getBuffer(), s.getBuffer()+s.length(), static_cast<mpl::int_<2> const*>(0)),
          e,
-         re_detail::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast<mpl::int_<2> const*>(0)),
+         BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast<mpl::int_<2> const*>(0)),
          flags);
    return result;
 }
index 57ea14c2565c01ef573d726842d95283c429d749..004b67f3f254e08be9f4c8c51a7221fbc6466912 100644 (file)
@@ -63,7 +63,7 @@ private:
 typedef regex_error bad_pattern;
 typedef regex_error bad_expression;
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 BOOST_REGEX_DECL void BOOST_REGEX_CALL raise_runtime_error(const std::runtime_error& ex);
 
@@ -72,7 +72,7 @@ void raise_error(const traits& t, regex_constants::error_type code)
 {
    (void)t;  // warning suppression
    std::runtime_error e(t.error_string(code));
-   ::boost::re_detail::raise_runtime_error(e);
+   ::boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(e);
 }
 
 }
index ae86152286274fd4c72ca5e5554a0e25df0f8b97..ac91af2914c7488ba2d9ee9d8381e1ced0fbed33 100644 (file)
@@ -42,7 +42,7 @@ namespace boost{
 #endif
 #endif
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 //
 // forward declaration, we will need this one later:
@@ -164,9 +164,9 @@ struct regex_data : public named_subexpressions
 
    regex_data(const ::boost::shared_ptr<
       ::boost::regex_traits_wrapper<traits> >& t) 
-      : m_ptraits(t), m_expression(0), m_expression_len(0) {}
+      : m_ptraits(t), m_expression(0), m_expression_len(0), m_disable_match_any(false) {}
    regex_data() 
-      : m_ptraits(new ::boost::regex_traits_wrapper<traits>()), m_expression(0), m_expression_len(0) {}
+      : m_ptraits(new ::boost::regex_traits_wrapper<traits>()), m_expression(0), m_expression_len(0), m_disable_match_any(false) {}
 
    ::boost::shared_ptr<
       ::boost::regex_traits_wrapper<traits>
@@ -176,16 +176,17 @@ struct regex_data : public named_subexpressions
    const charT*                m_expression;              // the original expression
    std::ptrdiff_t              m_expression_len;          // the length of the original expression
    size_type                   m_mark_count;              // the number of marked sub-expressions
-   re_detail::re_syntax_base*  m_first_state;             // the first state of the machine
+   BOOST_REGEX_DETAIL_NS::re_syntax_base*  m_first_state;             // the first state of the machine
    unsigned                    m_restart_type;            // search optimisation type
    unsigned char               m_startmap[1 << CHAR_BIT]; // which characters can start a match
    unsigned int                m_can_be_null;             // whether we can match a null string
-   re_detail::raw_storage      m_data;                    // the buffer in which our states are constructed
+   BOOST_REGEX_DETAIL_NS::raw_storage      m_data;                    // the buffer in which our states are constructed
    typename traits::char_class_type    m_word_mask;       // mask used to determine if a character is a word character
    std::vector<
       std::pair<
       std::size_t, std::size_t> > m_subs;                 // Position of sub-expressions within the *string*.
    bool                        m_has_recursions;          // whether we have recursive expressions;
+   bool                        m_disable_match_any;       // when set we need to disable the match_any flag as it causes different/buggy behaviour.
 };
 //
 // class basic_regex_implementation
@@ -266,7 +267,7 @@ public:
    {
       return this->m_mark_count - 1;
    }
-   const re_detail::re_syntax_base* get_first_state()const
+   const BOOST_REGEX_DETAIL_NS::re_syntax_base* get_first_state()const
    {
       return this->m_first_state;
    }
@@ -293,7 +294,7 @@ public:
    }
 };
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 //
 // class basic_regex:
 // represents the compiled
@@ -597,7 +598,7 @@ public:
    //
    // private access methods:
    //
-   const re_detail::re_syntax_base* get_first_state()const
+   const BOOST_REGEX_DETAIL_NS::re_syntax_base* get_first_state()const
    {
       BOOST_ASSERT(0 != m_pimpl.get());
       return m_pimpl->get_first_state();
@@ -622,18 +623,18 @@ public:
       BOOST_ASSERT(0 != m_pimpl.get());
       return m_pimpl->can_be_null();
    }
-   const re_detail::regex_data<charT, traits>& get_data()const
+   const BOOST_REGEX_DETAIL_NS::regex_data<charT, traits>& get_data()const
    {
       BOOST_ASSERT(0 != m_pimpl.get());
       return m_pimpl->get_data();
    }
-   boost::shared_ptr<re_detail::named_subexpressions > get_named_subs()const
+   boost::shared_ptr<BOOST_REGEX_DETAIL_NS::named_subexpressions > get_named_subs()const
    {
       return m_pimpl;
    }
 
 private:
-   shared_ptr<re_detail::basic_regex_implementation<charT, traits> > m_pimpl;
+   shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> > m_pimpl;
 };
 
 //
@@ -647,14 +648,14 @@ basic_regex<charT, traits>& basic_regex<charT, traits>::do_assign(const charT* p
                         const charT* p2,
                         flag_type f)
 {
-   shared_ptr<re_detail::basic_regex_implementation<charT, traits> > temp;
+   shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> > temp;
    if(!m_pimpl.get())
    {
-      temp = shared_ptr<re_detail::basic_regex_implementation<charT, traits> >(new re_detail::basic_regex_implementation<charT, traits>());
+      temp = shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> >(new BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits>());
    }
    else
    {
-      temp = shared_ptr<re_detail::basic_regex_implementation<charT, traits> >(new re_detail::basic_regex_implementation<charT, traits>(m_pimpl->m_ptraits));
+      temp = shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> >(new BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits>(m_pimpl->m_ptraits));
    }
    temp->assign(p1, p2, f);
    temp.swap(m_pimpl);
@@ -664,7 +665,7 @@ basic_regex<charT, traits>& basic_regex<charT, traits>::do_assign(const charT* p
 template <class charT, class traits>
 typename basic_regex<charT, traits>::locale_type BOOST_REGEX_CALL basic_regex<charT, traits>::imbue(locale_type l)
 { 
-   shared_ptr<re_detail::basic_regex_implementation<charT, traits> > temp(new re_detail::basic_regex_implementation<charT, traits>());
+   shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> > temp(new BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits>());
    locale_type result = temp->imbue(l);
    temp.swap(m_pimpl);
    return result;
index 821fb8298cab57c310c5c262a336d7a221697bb5..51704a849f79421c81232966d27fcbdd8682488e 100644 (file)
@@ -38,7 +38,7 @@
 
 namespace boost{
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 template <class charT>
 struct digraph : public std::pair<charT, charT>
@@ -371,9 +371,9 @@ re_syntax_base* basic_regex_creator<charT, traits>::append_set(
    //
    // fill in the basics:
    //
-   result->csingles = static_cast<unsigned int>(::boost::re_detail::distance(char_set.singles_begin(), char_set.singles_end()));
-   result->cranges = static_cast<unsigned int>(::boost::re_detail::distance(char_set.ranges_begin(), char_set.ranges_end())) / 2;
-   result->cequivalents = static_cast<unsigned int>(::boost::re_detail::distance(char_set.equivalents_begin(), char_set.equivalents_end()));
+   result->csingles = static_cast<unsigned int>(::boost::BOOST_REGEX_DETAIL_NS::distance(char_set.singles_begin(), char_set.singles_end()));
+   result->cranges = static_cast<unsigned int>(::boost::BOOST_REGEX_DETAIL_NS::distance(char_set.ranges_begin(), char_set.ranges_end())) / 2;
+   result->cequivalents = static_cast<unsigned int>(::boost::BOOST_REGEX_DETAIL_NS::distance(char_set.equivalents_begin(), char_set.equivalents_end()));
    result->cclasses = char_set.classes();
    result->cnclasses = char_set.negated_classes();
    if(flags() & regbase::icase)
@@ -463,10 +463,10 @@ re_syntax_base* basic_regex_creator<charT, traits>::append_set(
          return 0;
       }
       charT* p = static_cast<charT*>(this->m_pdata->m_data.extend(sizeof(charT) * (s1.size() + s2.size() + 2) ) );
-      re_detail::copy(s1.begin(), s1.end(), p);
+      BOOST_REGEX_DETAIL_NS::copy(s1.begin(), s1.end(), p);
       p[s1.size()] = charT(0);
       p += s1.size() + 1;
-      re_detail::copy(s2.begin(), s2.end(), p);
+      BOOST_REGEX_DETAIL_NS::copy(s2.begin(), s2.end(), p);
       p[s2.size()] = charT(0);
    }
    //
@@ -487,7 +487,7 @@ re_syntax_base* basic_regex_creator<charT, traits>::append_set(
       if(s.empty())
          return 0;  // invalid or unsupported equivalence class
       charT* p = static_cast<charT*>(this->m_pdata->m_data.extend(sizeof(charT) * (s.size()+1) ) );
-      re_detail::copy(s.begin(), s.end(), p);
+      BOOST_REGEX_DETAIL_NS::copy(s.begin(), s.end(), p);
       p[s.size()] = charT(0);
       ++first;
    }
@@ -664,7 +664,7 @@ void basic_regex_creator<charT, traits>::finalize(const charT* p1, const charT*
    m_pdata->m_expression_len = len;
    charT* ps = static_cast<charT*>(m_pdata->m_data.extend(sizeof(charT) * (1 + (p2 - p1))));
    m_pdata->m_expression = ps;
-   re_detail::copy(p1, p2, ps);
+   BOOST_REGEX_DETAIL_NS::copy(p1, p2, ps);
    ps[p2 - p1] = 0;
    // fill in our other data...
    // successful parsing implies a zero status:
@@ -1149,6 +1149,7 @@ void basic_regex_creator<charT, traits>::create_startmap(re_syntax_base* state,
          set_all_masks(l_map, mask);
          return;
       }
+      case syntax_element_accept:
       case syntax_element_match:
       {
          // must be null, any character can match:
@@ -1335,6 +1336,11 @@ void basic_regex_creator<charT, traits>::create_startmap(re_syntax_base* state,
          state = state->next.p;
          break;
 
+      case syntax_element_commit:
+         set_all_masks(l_map, mask);
+         // Continue scanning so we can figure out whether we can be null:
+         state = state->next.p;
+         break;
       case syntax_element_startmark:
          // need to handle independent subs as a special case:
          if(static_cast<re_brace*>(state)->index == -3)
@@ -1456,15 +1462,15 @@ syntax_element_type basic_regex_creator<charT, traits>::get_repeat_type(re_synta
       {
          switch(state->next.p->type)
          {
-         case re_detail::syntax_element_wild:
-            return re_detail::syntax_element_dot_rep;
-         case re_detail::syntax_element_literal:
-            return re_detail::syntax_element_char_rep;
-         case re_detail::syntax_element_set:
-            return re_detail::syntax_element_short_set_rep;
-         case re_detail::syntax_element_long_set:
-            if(static_cast<re_detail::re_set_long<m_type>*>(state->next.p)->singleton)
-               return re_detail::syntax_element_long_set_rep;
+         case BOOST_REGEX_DETAIL_NS::syntax_element_wild:
+            return BOOST_REGEX_DETAIL_NS::syntax_element_dot_rep;
+         case BOOST_REGEX_DETAIL_NS::syntax_element_literal:
+            return BOOST_REGEX_DETAIL_NS::syntax_element_char_rep;
+         case BOOST_REGEX_DETAIL_NS::syntax_element_set:
+            return BOOST_REGEX_DETAIL_NS::syntax_element_short_set_rep;
+         case BOOST_REGEX_DETAIL_NS::syntax_element_long_set:
+            if(static_cast<BOOST_REGEX_DETAIL_NS::re_set_long<m_type>*>(state->next.p)->singleton)
+               return BOOST_REGEX_DETAIL_NS::syntax_element_long_set_rep;
             break;
          default:
             break;
@@ -1529,7 +1535,7 @@ void basic_regex_creator<charT, traits>::probe_leading_repeat(re_syntax_base* st
 }
 
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 
 } // namespace boost
 
index 3c331a57c4f11bae56b6bb7a6da73956f397666f..4a80ab9c3258561db7326705ee422ed883e97282 100644 (file)
@@ -31,7 +31,7 @@
 #endif
 
 namespace boost{
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 #ifdef BOOST_MSVC
 #pragma warning(push)
@@ -68,6 +68,8 @@ public:
    bool parse_inner_set(basic_char_set<charT, traits>& char_set);
    bool parse_QE();
    bool parse_perl_extension();
+   bool parse_perl_verb();
+   bool match_verb(const char*);
    bool add_emacs_code(bool negate);
    bool unwind_alts(std::ptrdiff_t last_paren_start);
    digraph<charT> get_next_set_literal(basic_char_set<charT, traits>& char_set);
@@ -165,7 +167,7 @@ void basic_regex_parser<charT, traits>::parse(const charT* p1, const charT* p2,
    // have had an unexpected ')' :
    if(!result)
    {
-      fail(regex_constants::error_paren, ::boost::re_detail::distance(m_base, m_position), "Found a closing ) with no corresponding openening parenthesis.");
+      fail(regex_constants::error_paren, ::boost::BOOST_REGEX_DETAIL_NS::distance(m_base, m_position), "Found a closing ) with no corresponding openening parenthesis.");
       return;
    }
    // if an error has been set then give up now:
@@ -421,6 +423,8 @@ bool basic_regex_parser<charT, traits>::parse_open_paren()
    {
       if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_question)
          return parse_perl_extension();
+      if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_star)
+         return parse_perl_verb();
    }
    //
    // update our mark count, and append the required state:
@@ -489,7 +493,7 @@ bool basic_regex_parser<charT, traits>::parse_open_paren()
    //
    if(m_position == m_end)
    {
-      this->fail(regex_constants::error_paren, ::boost::re_detail::distance(m_base, m_end));
+      this->fail(regex_constants::error_paren, ::boost::BOOST_REGEX_DETAIL_NS::distance(m_base, m_end));
       return false;
    }
    BOOST_ASSERT(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_mark);
@@ -924,9 +928,9 @@ bool basic_regex_parser<charT, traits>::parse_match_any()
    static_cast<re_dot*>(
       this->append_state(syntax_element_wild, sizeof(re_dot))
       )->mask = static_cast<unsigned char>(this->flags() & regbase::no_mod_s 
-      ? re_detail::force_not_newline 
+      ? BOOST_REGEX_DETAIL_NS::force_not_newline 
          : this->flags() & regbase::mod_s ?
-            re_detail::force_newline : re_detail::dont_care);
+            BOOST_REGEX_DETAIL_NS::force_newline : BOOST_REGEX_DETAIL_NS::dont_care);
    return true;
 }
 
@@ -963,7 +967,7 @@ bool basic_regex_parser<charT, traits>::parse_repeat(std::size_t low, std::size_
    }
    if(0 == this->m_last_state)
    {
-      fail(regex_constants::error_badrepeat, ::boost::re_detail::distance(m_base, m_position), "Nothing to repeat.");
+      fail(regex_constants::error_badrepeat, ::boost::BOOST_REGEX_DETAIL_NS::distance(m_base, m_position), "Nothing to repeat.");
       return false;
    }
    if(this->m_last_state->type == syntax_element_endmark)
@@ -1235,7 +1239,7 @@ bool basic_regex_parser<charT, traits>::parse_alt()
    //
    // we need to append a trailing jump: 
    //
-   re_syntax_base* pj = this->append_state(re_detail::syntax_element_jump, sizeof(re_jump));
+   re_syntax_base* pj = this->append_state(BOOST_REGEX_DETAIL_NS::syntax_element_jump, sizeof(re_jump));
    std::ptrdiff_t jump_offset = this->getoffset(pj);
    //
    // now insert the alternative:
@@ -1784,7 +1788,7 @@ charT basic_regex_parser<charT, traits>::unescape_character()
       {
       // an octal escape sequence, the first character must be a zero
       // followed by up to 3 octal digits:
-      std::ptrdiff_t len = (std::min)(::boost::re_detail::distance(m_position, m_end), static_cast<std::ptrdiff_t>(4));
+      std::ptrdiff_t len = (std::min)(::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end), static_cast<std::ptrdiff_t>(4));
       const charT* bp = m_position;
       int val = this->m_traits.toi(bp, bp + 1, 8);
       if(val != 0)
@@ -2521,7 +2525,7 @@ option_group_jump:
       // Rewind to start of (? sequence:
       --m_position;
       while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
-      this->fail(regex_constants::error_paren, ::boost::re_detail::distance(m_base, m_end));
+      this->fail(regex_constants::error_paren, ::boost::BOOST_REGEX_DETAIL_NS::distance(m_base, m_end));
       return false;
    }
    BOOST_ASSERT(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_mark);
@@ -2652,6 +2656,194 @@ option_group_jump:
    return true;
 }
 
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::match_verb(const char* verb)
+{
+   while(*verb)
+   {
+      if(static_cast<charT>(*verb) != *m_position)
+      {
+         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+         fail(regex_constants::error_perl_extension, m_position - m_base);
+         return false;
+      }
+      if(++m_position == m_end)
+      {
+         --m_position;
+         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+         fail(regex_constants::error_perl_extension, m_position - m_base);
+         return false;
+      }
+      ++verb;
+   }
+   return true;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_perl_verb()
+{
+   if(++m_position == m_end)
+   {
+      // Rewind to start of (* sequence:
+      --m_position;
+      while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+      fail(regex_constants::error_perl_extension, m_position - m_base);
+      return false;
+   }
+   switch(*m_position)
+   {
+   case 'F':
+      if(++m_position == m_end)
+      {
+         // Rewind to start of (* sequence:
+         --m_position;
+         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+         fail(regex_constants::error_perl_extension, m_position - m_base);
+         return false;
+      }
+      if((this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_mark) || match_verb("AIL"))
+      {
+         if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark))
+         {
+            // Rewind to start of (* sequence:
+            --m_position;
+            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+            fail(regex_constants::error_perl_extension, m_position - m_base);
+            return false;
+         }
+         ++m_position;
+         this->append_state(syntax_element_fail);
+         return true;
+      }
+      break;
+   case 'A':
+      if(++m_position == m_end)
+      {
+         // Rewind to start of (* sequence:
+         --m_position;
+         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+         fail(regex_constants::error_perl_extension, m_position - m_base);
+         return false;
+      }
+      if(match_verb("CCEPT"))
+      {
+         if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark))
+         {
+            // Rewind to start of (* sequence:
+            --m_position;
+            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+            fail(regex_constants::error_perl_extension, m_position - m_base);
+            return false;
+         }
+         ++m_position;
+         this->append_state(syntax_element_accept);
+         return true;
+      }
+      break;
+   case 'C':
+      if(++m_position == m_end)
+      {
+         // Rewind to start of (* sequence:
+         --m_position;
+         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+         fail(regex_constants::error_perl_extension, m_position - m_base);
+         return false;
+      }
+      if(match_verb("OMMIT"))
+      {
+         if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark))
+         {
+            // Rewind to start of (* sequence:
+            --m_position;
+            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+            fail(regex_constants::error_perl_extension, m_position - m_base);
+            return false;
+         }
+         ++m_position;
+         static_cast<re_commit*>(this->append_state(syntax_element_commit, sizeof(re_commit)))->action = commit_commit;
+         this->m_pdata->m_disable_match_any = true;
+         return true;
+      }
+      break;
+   case 'P':
+      if(++m_position == m_end)
+      {
+         // Rewind to start of (* sequence:
+         --m_position;
+         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+         fail(regex_constants::error_perl_extension, m_position - m_base);
+         return false;
+      }
+      if(match_verb("RUNE"))
+      {
+         if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark))
+         {
+            // Rewind to start of (* sequence:
+            --m_position;
+            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+            fail(regex_constants::error_perl_extension, m_position - m_base);
+            return false;
+         }
+         ++m_position;
+         static_cast<re_commit*>(this->append_state(syntax_element_commit, sizeof(re_commit)))->action = commit_prune;
+         this->m_pdata->m_disable_match_any = true;
+         return true;
+      }
+      break;
+   case 'S':
+      if(++m_position == m_end)
+      {
+         // Rewind to start of (* sequence:
+         --m_position;
+         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+         fail(regex_constants::error_perl_extension, m_position - m_base);
+         return false;
+      }
+      if(match_verb("KIP"))
+      {
+         if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark))
+         {
+            // Rewind to start of (* sequence:
+            --m_position;
+            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+            fail(regex_constants::error_perl_extension, m_position - m_base);
+            return false;
+         }
+         ++m_position;
+         static_cast<re_commit*>(this->append_state(syntax_element_commit, sizeof(re_commit)))->action = commit_skip;
+         this->m_pdata->m_disable_match_any = true;
+         return true;
+      }
+      break;
+   case 'T':
+      if(++m_position == m_end)
+      {
+         // Rewind to start of (* sequence:
+         --m_position;
+         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+         fail(regex_constants::error_perl_extension, m_position - m_base);
+         return false;
+      }
+      if(match_verb("HEN"))
+      {
+         if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark))
+         {
+            // Rewind to start of (* sequence:
+            --m_position;
+            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
+            fail(regex_constants::error_perl_extension, m_position - m_base);
+            return false;
+         }
+         ++m_position;
+         this->append_state(syntax_element_then);
+         this->m_pdata->m_disable_match_any = true;
+         return true;
+      }
+      break;
+   }
+   return false;
+}
+
 template <class charT, class traits>
 bool basic_regex_parser<charT, traits>::add_emacs_code(bool negate)
 {
@@ -2862,7 +3054,7 @@ bool basic_regex_parser<charT, traits>::unwind_alts(std::ptrdiff_t last_paren_st
 #pragma warning(pop)
 #endif
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 } // namespace boost
 
 #ifdef BOOST_MSVC
index 106ffcbfc2b55a64749c62a632d4a1bbf9ba89c7..709663a38563ae9c474a5c858c784f404a966c72 100644 (file)
@@ -69,7 +69,7 @@ namespace boost{
 template <class charT>
 class cpp_regex_traits;
    
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 //
 // class parser_buf:
@@ -290,7 +290,7 @@ void cpp_regex_traits_char_layer<charT>::init()
       {
          std::string m("Unable to open message catalog: ");
          std::runtime_error err(m + cat_name);
-         boost::re_detail::raise_runtime_error(err);
+         boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err);
       }
    }
    //
@@ -415,8 +415,9 @@ template <class charT>
 class cpp_regex_traits_implementation : public cpp_regex_traits_char_layer<charT>
 {
 public:
-   typedef typename cpp_regex_traits<charT>::char_class_type char_class_type;
-   typedef typename std::ctype<charT>::mask                  native_mask_type;
+   typedef typename cpp_regex_traits<charT>::char_class_type      char_class_type;
+   typedef typename std::ctype<charT>::mask                       native_mask_type;
+   typedef typename boost::make_unsigned<native_mask_type>::type  unsigned_native_mask_type;
 #ifndef BOOST_REGEX_BUGGY_CTYPE_FACET
    BOOST_STATIC_CONSTANT(char_class_type, mask_blank = 1u << 24);
    BOOST_STATIC_CONSTANT(char_class_type, mask_word = 1u << 25);
@@ -717,7 +718,7 @@ void cpp_regex_traits_implementation<charT>::init()
       {
          std::string m("Unable to open message catalog: ");
          std::runtime_error err(m + cat_name);
-         boost::re_detail::raise_runtime_error(err);
+         boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err);
       }
    }
    //
@@ -753,19 +754,19 @@ void cpp_regex_traits_implementation<charT>::init()
 #ifndef BOOST_REGEX_BUGGY_CTYPE_FACET
       static const char_class_type masks[16] = 
       {
-         std::ctype<charT>::alnum,
-         std::ctype<charT>::alpha,
-         std::ctype<charT>::cntrl,
-         std::ctype<charT>::digit,
-         std::ctype<charT>::graph,
+         static_cast<unsigned_native_mask_type>(std::ctype<charT>::alnum),
+         static_cast<unsigned_native_mask_type>(std::ctype<charT>::alpha),
+         static_cast<unsigned_native_mask_type>(std::ctype<charT>::cntrl),
+         static_cast<unsigned_native_mask_type>(std::ctype<charT>::digit),
+         static_cast<unsigned_native_mask_type>(std::ctype<charT>::graph),
          cpp_regex_traits_implementation<charT>::mask_horizontal,
-         std::ctype<charT>::lower,
-         std::ctype<charT>::print,
-         std::ctype<charT>::punct,
-         std::ctype<charT>::space,
-         std::ctype<charT>::upper,
+         static_cast<unsigned_native_mask_type>(std::ctype<charT>::lower),
+         static_cast<unsigned_native_mask_type>(std::ctype<charT>::print),
+         static_cast<unsigned_native_mask_type>(std::ctype<charT>::punct),
+         static_cast<unsigned_native_mask_type>(std::ctype<charT>::space),
+         static_cast<unsigned_native_mask_type>(std::ctype<charT>::upper),
          cpp_regex_traits_implementation<charT>::mask_vertical,
-         std::ctype<charT>::xdigit,
+         static_cast<unsigned_native_mask_type>(std::ctype<charT>::xdigit),
          cpp_regex_traits_implementation<charT>::mask_blank,
          cpp_regex_traits_implementation<charT>::mask_word,
          cpp_regex_traits_implementation<charT>::mask_unicode,
@@ -773,22 +774,22 @@ void cpp_regex_traits_implementation<charT>::init()
 #else
       static const char_class_type masks[16] = 
       {
-         ::boost::re_detail::char_class_alnum,
-         ::boost::re_detail::char_class_alpha,
-         ::boost::re_detail::char_class_cntrl,
-         ::boost::re_detail::char_class_digit,
-         ::boost::re_detail::char_class_graph,
-         ::boost::re_detail::char_class_horizontal_space,
-         ::boost::re_detail::char_class_lower,
-         ::boost::re_detail::char_class_print,
-         ::boost::re_detail::char_class_punct,
-         ::boost::re_detail::char_class_space,
-         ::boost::re_detail::char_class_upper,
-         ::boost::re_detail::char_class_vertical_space,
-         ::boost::re_detail::char_class_xdigit,
-         ::boost::re_detail::char_class_blank,
-         ::boost::re_detail::char_class_word,
-         ::boost::re_detail::char_class_unicode,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_alnum,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_alpha,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_cntrl,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_digit,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_graph,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_horizontal_space,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_lower,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_print,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_punct,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_space,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_upper,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_vertical_space,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_xdigit,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_blank,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_word,
+         ::boost::BOOST_REGEX_DETAIL_NS::char_class_unicode,
       };
 #endif
       static const string_type null_string;
@@ -803,7 +804,7 @@ void cpp_regex_traits_implementation<charT>::init()
    //
    // get the collation format used by m_pcollate:
    //
-   m_collate_type = re_detail::find_sort_syntax(this, &m_collate_delim);
+   m_collate_type = BOOST_REGEX_DETAIL_NS::find_sort_syntax(this, &m_collate_delim);
 }
 
 template <class charT>
@@ -814,53 +815,53 @@ typename cpp_regex_traits_implementation<charT>::char_class_type
    static const char_class_type masks[22] = 
    {
       0,
-      std::ctype<char>::alnum, 
-      std::ctype<char>::alpha,
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::alnum),
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::alpha),
       cpp_regex_traits_implementation<charT>::mask_blank,
-      std::ctype<char>::cntrl,
-      std::ctype<char>::digit,
-      std::ctype<char>::digit,
-      std::ctype<char>::graph,
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::cntrl),
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::digit),
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::digit),
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::graph),
       cpp_regex_traits_implementation<charT>::mask_horizontal,
-      std::ctype<char>::lower,
-      std::ctype<char>::lower,
-      std::ctype<char>::print,
-      std::ctype<char>::punct,
-      std::ctype<char>::space,
-      std::ctype<char>::space,
-      std::ctype<char>::upper,
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::lower),
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::lower),
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::print),
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::punct),
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::space),
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::space),
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::upper),
       cpp_regex_traits_implementation<charT>::mask_unicode,
-      std::ctype<char>::upper,
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::upper),
       cpp_regex_traits_implementation<charT>::mask_vertical,
-      std::ctype<char>::alnum | cpp_regex_traits_implementation<charT>::mask_word, 
-      std::ctype<char>::alnum | cpp_regex_traits_implementation<charT>::mask_word, 
-      std::ctype<char>::xdigit,
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::alnum) | cpp_regex_traits_implementation<charT>::mask_word, 
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::alnum) | cpp_regex_traits_implementation<charT>::mask_word, 
+      static_cast<unsigned_native_mask_type>(std::ctype<char>::xdigit),
    };
 #else
    static const char_class_type masks[22] = 
    {
       0,
-      ::boost::re_detail::char_class_alnum, 
-      ::boost::re_detail::char_class_alpha,
-      ::boost::re_detail::char_class_blank,
-      ::boost::re_detail::char_class_cntrl,
-      ::boost::re_detail::char_class_digit,
-      ::boost::re_detail::char_class_digit,
-      ::boost::re_detail::char_class_graph,
-      ::boost::re_detail::char_class_horizontal_space,
-      ::boost::re_detail::char_class_lower,
-      ::boost::re_detail::char_class_lower,
-      ::boost::re_detail::char_class_print,
-      ::boost::re_detail::char_class_punct,
-      ::boost::re_detail::char_class_space,
-      ::boost::re_detail::char_class_space,
-      ::boost::re_detail::char_class_upper,
-      ::boost::re_detail::char_class_unicode,
-      ::boost::re_detail::char_class_upper,
-      ::boost::re_detail::char_class_vertical_space,
-      ::boost::re_detail::char_class_alnum | ::boost::re_detail::char_class_word, 
-      ::boost::re_detail::char_class_alnum | ::boost::re_detail::char_class_word, 
-      ::boost::re_detail::char_class_xdigit,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_alnum, 
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_alpha,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_blank,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_cntrl,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_digit,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_digit,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_graph,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_horizontal_space,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_lower,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_lower,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_print,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_punct,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_space,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_space,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_upper,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_unicode,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_upper,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_vertical_space,
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_alnum | ::boost::BOOST_REGEX_DETAIL_NS::char_class_word, 
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_alnum | ::boost::BOOST_REGEX_DETAIL_NS::char_class_word, 
+      ::boost::BOOST_REGEX_DETAIL_NS::char_class_xdigit,
    };
 #endif
    if(m_custom_class_names.size())
@@ -870,7 +871,7 @@ typename cpp_regex_traits_implementation<charT>::char_class_type
       if(pos != m_custom_class_names.end())
          return pos->second;
    }
-   std::size_t state_id = 1 + re_detail::get_default_class_id(p1, p2);
+   std::size_t state_id = 1 + BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2);
    BOOST_ASSERT(state_id < sizeof(masks) / sizeof(masks[0]));
    return masks[state_id];
 }
@@ -880,20 +881,20 @@ template <class charT>
 bool cpp_regex_traits_implementation<charT>::isctype(const charT c, char_class_type mask) const
 {
    return
-      ((mask & ::boost::re_detail::char_class_space) && (this->m_pctype->is(std::ctype<charT>::space, c)))
-      || ((mask & ::boost::re_detail::char_class_print) && (this->m_pctype->is(std::ctype<charT>::print, c)))
-      || ((mask & ::boost::re_detail::char_class_cntrl) && (this->m_pctype->is(std::ctype<charT>::cntrl, c)))
-      || ((mask & ::boost::re_detail::char_class_upper) && (this->m_pctype->is(std::ctype<charT>::upper, c)))
-      || ((mask & ::boost::re_detail::char_class_lower) && (this->m_pctype->is(std::ctype<charT>::lower, c)))
-      || ((mask & ::boost::re_detail::char_class_alpha) && (this->m_pctype->is(std::ctype<charT>::alpha, c)))
-      || ((mask & ::boost::re_detail::char_class_digit) && (this->m_pctype->is(std::ctype<charT>::digit, c)))
-      || ((mask & ::boost::re_detail::char_class_punct) && (this->m_pctype->is(std::ctype<charT>::punct, c)))
-      || ((mask & ::boost::re_detail::char_class_xdigit) && (this->m_pctype->is(std::ctype<charT>::xdigit, c)))
-      || ((mask & ::boost::re_detail::char_class_blank) && (this->m_pctype->is(std::ctype<charT>::space, c)) && !::boost::re_detail::is_separator(c))
-      || ((mask & ::boost::re_detail::char_class_word) && (c == '_'))
-      || ((mask & ::boost::re_detail::char_class_unicode) && ::boost::re_detail::is_extended(c))
-      || ((mask & ::boost::re_detail::char_class_vertical_space) && (is_separator(c) || (c == '\v')))
-      || ((mask & ::boost::re_detail::char_class_horizontal_space) && this->m_pctype->is(std::ctype<charT>::space, c) && !(is_separator(c) || (c == '\v')));
+      ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_space) && (this->m_pctype->is(std::ctype<charT>::space, c)))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_print) && (this->m_pctype->is(std::ctype<charT>::print, c)))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_cntrl) && (this->m_pctype->is(std::ctype<charT>::cntrl, c)))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_upper) && (this->m_pctype->is(std::ctype<charT>::upper, c)))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_lower) && (this->m_pctype->is(std::ctype<charT>::lower, c)))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_alpha) && (this->m_pctype->is(std::ctype<charT>::alpha, c)))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_digit) && (this->m_pctype->is(std::ctype<charT>::digit, c)))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_punct) && (this->m_pctype->is(std::ctype<charT>::punct, c)))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_xdigit) && (this->m_pctype->is(std::ctype<charT>::xdigit, c)))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_blank) && (this->m_pctype->is(std::ctype<charT>::space, c)) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_word) && (c == '_'))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_unicode) && ::boost::BOOST_REGEX_DETAIL_NS::is_extended(c))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_vertical_space) && (is_separator(c) || (c == '\v')))
+      || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_horizontal_space) && this->m_pctype->is(std::ctype<charT>::space, c) && !(is_separator(c) || (c == '\v')));
 }
 #endif
 
@@ -905,7 +906,7 @@ inline boost::shared_ptr<const cpp_regex_traits_implementation<charT> > create_c
    return ::boost::object_cache<cpp_regex_traits_base<charT>, cpp_regex_traits_implementation<charT> >::get(key, 5);
 }
 
-} // re_detail
+} // BOOST_REGEX_DETAIL_NS
 
 template <class charT>
 class cpp_regex_traits
@@ -922,7 +923,7 @@ public:
    struct boost_extensions_tag{};
 
    cpp_regex_traits()
-      : m_pimpl(re_detail::create_cpp_regex_traits<charT>(std::locale()))
+      : m_pimpl(BOOST_REGEX_DETAIL_NS::create_cpp_regex_traits<charT>(std::locale()))
    { }
    static size_type length(const char_type* p)
    {
@@ -995,20 +996,32 @@ public:
          && (m_pimpl->m_pctype->is(
             static_cast<ctype_mask>(f & mask_base), c)))
          return true;
-      else if((f & re_detail::cpp_regex_traits_implementation<charT>::mask_unicode) && re_detail::is_extended(c))
+      else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_unicode) && BOOST_REGEX_DETAIL_NS::is_extended(c))
          return true;
-      else if((f & re_detail::cpp_regex_traits_implementation<charT>::mask_word) && (c == '_'))
+      else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_word) && (c == '_'))
          return true;
-      else if((f & re_detail::cpp_regex_traits_implementation<charT>::mask_blank) 
+      else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_blank) 
          && m_pimpl->m_pctype->is(std::ctype<charT>::space, c)
-         && !re_detail::is_separator(c))
+         && !BOOST_REGEX_DETAIL_NS::is_separator(c))
          return true;
-      else if((f & re_detail::cpp_regex_traits_implementation<charT>::mask_vertical) 
-         && (::boost::re_detail::is_separator(c) || (c == '\v')))
+      else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_vertical) 
+         && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == '\v')))
          return true;
-      else if((f & re_detail::cpp_regex_traits_implementation<charT>::mask_horizontal) 
-         && this->isctype(c, std::ctype<charT>::space) && !this->isctype(c, re_detail::cpp_regex_traits_implementation<charT>::mask_vertical))
+      else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_horizontal) 
+         && this->isctype(c, std::ctype<charT>::space) && !this->isctype(c, BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_vertical))
          return true;
+#ifdef __CYGWIN__
+      //
+      // Cygwin has a buggy ctype facet, see https://www.cygwin.com/ml/cygwin/2012-08/msg00178.html:
+      //
+      else if((f & std::ctype<charT>::xdigit) == std::ctype<charT>::xdigit)
+      {
+         if((c >= 'a') && (c <= 'f'))
+            return true;
+         if((c >= 'A') && (c <= 'F'))
+            return true;
+      }
+#endif
       return false;
 #else
       return m_pimpl->isctype(c, f);
@@ -1023,7 +1036,7 @@ public:
    locale_type imbue(locale_type l)
    {
       std::locale result(getloc());
-      m_pimpl = re_detail::create_cpp_regex_traits<charT>(l);
+      m_pimpl = BOOST_REGEX_DETAIL_NS::create_cpp_regex_traits<charT>(l);
       return result;
    }
    locale_type getloc()const
@@ -1043,7 +1056,7 @@ public:
    static std::string get_catalog_name();
 
 private:
-   boost::shared_ptr<const re_detail::cpp_regex_traits_implementation<charT> > m_pimpl;
+   boost::shared_ptr<const BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT> > m_pimpl;
    //
    // catalog name handler:
    //
@@ -1058,7 +1071,7 @@ private:
 template <class charT>
 int cpp_regex_traits<charT>::toi(const charT*& first, const charT* last, int radix)const
 {
-   re_detail::parser_buf<charT>   sbuf;            // buffer for parsing numbers.
+   BOOST_REGEX_DETAIL_NS::parser_buf<charT>   sbuf;            // buffer for parsing numbers.
    std::basic_istream<charT>      is(&sbuf);       // stream for parsing numbers.
 
    // we do NOT want to parse any thousands separators inside the stream:
index 7b3df1e510830b16eedeec3ea8a9822697758c27..67abfbee19413b3f6b0203521ca316d96fec6cfa 100644 (file)
@@ -221,7 +221,7 @@ namespace boost{
 
 class RegEx;
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 class RegExData;
 struct pred1;
@@ -229,7 +229,7 @@ struct pred2;
 struct pred3;
 struct pred4;
 
-}  /* namespace re_detail */
+}  /* namespace BOOST_REGEX_DETAIL_NS */
 
 #if (defined(BOOST_MSVC) || defined(__BORLANDC__)) && !defined(BOOST_DISABLE_WIN32)
 typedef bool (__cdecl *GrepCallback)(const RegEx& expression);
@@ -244,7 +244,7 @@ typedef bool (*FindFilesCallback)(const char* file);
 class BOOST_REGEX_DECL RegEx
 {
 private:
-   re_detail::RegExData* pdata;
+   BOOST_REGEX_DETAIL_NS::RegExData* pdata;
 public:
    RegEx();
    RegEx(const RegEx& o);
@@ -296,10 +296,10 @@ public:
 
    static const std::size_t npos;
 
-   friend struct re_detail::pred1;
-   friend struct re_detail::pred2;
-   friend struct re_detail::pred3;
-   friend struct re_detail::pred4;
+   friend struct BOOST_REGEX_DETAIL_NS::pred1;
+   friend struct BOOST_REGEX_DETAIL_NS::pred2;
+   friend struct BOOST_REGEX_DETAIL_NS::pred3;
+   friend struct BOOST_REGEX_DETAIL_NS::pred4;
 };
 
 #ifdef BOOST_MSVC
index f13c4b2fb7dd067da77cd48796489b940f7edf79..4873a0a85e14bfc12a734457c1150e70108a7bf5 100644 (file)
@@ -49,7 +49,7 @@
 #include <cstddef>
 
 namespace boost{
-   namespace re_detail{
+   namespace BOOST_REGEX_DETAIL_NS{
 
 #ifndef BOOST_NO_ANSI_APIS
 typedef WIN32_FIND_DATAA _fi_find_data;
@@ -58,7 +58,7 @@ typedef WIN32_FIND_DATAW _fi_find_data;
 #endif
 typedef HANDLE _fi_find_handle;
 
-   } // namespace re_detail
+   } // namespace BOOST_REGEX_DETAIL_NS
 
 } // namespace boost
 
@@ -84,7 +84,7 @@ using std::list;
 #endif
 
 namespace boost{
-   namespace re_detail{
+   namespace BOOST_REGEX_DETAIL_NS{
 
 #ifdef BOOST_HAS_ABI_HEADERS
 #  include BOOST_ABI_PREFIX
@@ -110,7 +110,7 @@ bool _fi_FindClose(_fi_find_handle hFindFile);
 #  include BOOST_ABI_SUFFIX
 #endif
 
-   } // namespace re_detail
+   } // namespace BOOST_REGEX_DETAIL_NS
 } // namespace boost
 
 #ifdef FindFirstFile
@@ -130,7 +130,7 @@ bool _fi_FindClose(_fi_find_handle hFindFile);
 #endif
 
 namespace boost{
-   namespace re_detail{
+   namespace BOOST_REGEX_DETAIL_NS{
 
 #ifdef BOOST_HAS_ABI_HEADERS
 #  include BOOST_ABI_PREFIX
@@ -427,10 +427,10 @@ inline bool operator < (const directory_iterator&, const directory_iterator&)
 #endif
 
 
-} // namespace re_detail
-using boost::re_detail::directory_iterator;
-using boost::re_detail::file_iterator;
-using boost::re_detail::mapfile;
+} // namespace BOOST_REGEX_DETAIL_NS
+using boost::BOOST_REGEX_DETAIL_NS::directory_iterator;
+using boost::BOOST_REGEX_DETAIL_NS::file_iterator;
+using boost::BOOST_REGEX_DETAIL_NS::mapfile;
 } // namespace boost
 
 #endif     // BOOST_REGEX_NO_FILEITER
index 6fa811d2325e22d260230a89eca08d0c414672f4..f66b237cb9494be868f8a28a2a7131d04aa97427 100644 (file)
@@ -54,7 +54,7 @@ namespace boost{
 template class BOOST_REGEX_DECL basic_regex< BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >;
 template class BOOST_REGEX_DECL match_results< const BOOST_REGEX_CHAR_T* >;
 #ifndef BOOST_NO_STD_ALLOCATOR
-template class BOOST_REGEX_DECL ::boost::re_detail::perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >;
+template class BOOST_REGEX_DECL ::boost::BOOST_REGEX_DETAIL_NS::perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >;
 #endif
 
 #  ifndef BOOST_REGEX_INSTANTIATE
@@ -94,7 +94,7 @@ template class BOOST_REGEX_TEMPLATE_DECL basic_regex< BOOST_REGEX_CHAR_T BOOST_R
 
 template class BOOST_REGEX_TEMPLATE_DECL match_results< const BOOST_REGEX_CHAR_T* >;
 #ifndef BOOST_NO_STD_ALLOCATOR
-template class BOOST_REGEX_TEMPLATE_DECL ::boost::re_detail::perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >;
+template class BOOST_REGEX_TEMPLATE_DECL ::boost::BOOST_REGEX_DETAIL_NS::perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >;
 #endif
 #if !(defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB <= 1))\
    && !(defined(BOOST_INTEL_CXX_VERSION) && (BOOST_INTEL_CXX_VERSION <= 800))\
@@ -102,7 +102,7 @@ template class BOOST_REGEX_TEMPLATE_DECL ::boost::re_detail::perl_matcher<BOOST_
    && !defined(BOOST_REGEX_ICU_INSTANCES)
 template class BOOST_REGEX_TEMPLATE_DECL match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >;
 #ifndef BOOST_NO_STD_ALLOCATOR
-template class BOOST_REGEX_TEMPLATE_DECL ::boost::re_detail::perl_matcher< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >;
+template class BOOST_REGEX_TEMPLATE_DECL ::boost::BOOST_REGEX_DETAIL_NS::perl_matcher< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >;
 #endif
 #endif
 
@@ -119,6 +119,11 @@ template class BOOST_REGEX_TEMPLATE_DECL ::boost::re_detail::perl_matcher< std::
 
 #elif (defined(__GNUC__) && (__GNUC__ >= 3)) || !defined(BOOST_NO_CXX11_EXTERN_TEMPLATE)
 
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wkeyword-macro"
+#endif
+
 #  ifndef BOOST_REGEX_INSTANTIATE
 #     ifdef __GNUC__
 #        define template __extension__ extern template
@@ -128,7 +133,7 @@ template class BOOST_REGEX_TEMPLATE_DECL ::boost::re_detail::perl_matcher< std::
 #  endif
 
 #if !defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_REGEX_ICU_INSTANCES)
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 template BOOST_REGEX_DECL
 std::locale cpp_regex_traits_base<BOOST_REGEX_CHAR_T>::imbue(const std::locale& l);
 
@@ -177,7 +182,7 @@ template BOOST_REGEX_DECL void BOOST_REGEX_CALL
    match_results<const BOOST_REGEX_CHAR_T*>::maybe_assign(
       const match_results<const BOOST_REGEX_CHAR_T*>& m);
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 template BOOST_REGEX_DECL void perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >::construct_init(
       const basic_regex<BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >& e, match_flag_type f);
 template BOOST_REGEX_DECL bool perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >::match();
@@ -193,7 +198,7 @@ template BOOST_REGEX_DECL void BOOST_REGEX_CALL
    match_results<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator>::maybe_assign(
       const match_results<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator>& m);
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 template BOOST_REGEX_DECL void perl_matcher<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >::construct_init(
       const basic_regex<BOOST_REGEX_CHAR_T>& e, match_flag_type f);
 template BOOST_REGEX_DECL bool perl_matcher<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >::match();
@@ -205,7 +210,9 @@ template BOOST_REGEX_DECL bool perl_matcher<std::basic_string<BOOST_REGEX_CHAR_T
 #     undef template
 #  endif
 
-
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
 #endif
 
 } // namespace boost
index 53e137604121cb1e1fd97b99dcd81e3e27470b32..ae45ecb80c5d010011ef444de2cd7b8bc8f8cf1d 100644 (file)
@@ -31,7 +31,7 @@
 #endif
 
 namespace boost{
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 #if defined(BOOST_NO_STD_ITERATOR_TRAITS)
 
@@ -117,7 +117,7 @@ struct regex_iterator_traits : public std::iterator_traits<T> {};
 
 #endif
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 } // namespace boost
 
 #ifdef BOOST_MSVC
index 3e79b7a766b20125ccbd28c944a1e5248ce3c4e5..c8233bdd874b87b8c037c0c05c83230698d3a40a 100644 (file)
@@ -39,7 +39,7 @@ namespace boost{
 #  endif
 #endif
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 class named_subexpressions;
 
@@ -64,14 +64,14 @@ public:
    typedef          const_reference                                         reference;
    typedef typename vector_type::const_iterator                             const_iterator;
    typedef          const_iterator                                          iterator;
-   typedef typename re_detail::regex_iterator_traits<
+   typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<
                                     BidiIterator>::difference_type          difference_type;
    typedef typename Allocator::size_type                                    size_type;
    typedef          Allocator                                               allocator_type;
-   typedef typename re_detail::regex_iterator_traits<
+   typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<
                                     BidiIterator>::value_type               char_type;
    typedef          std::basic_string<char_type>                            string_type;
-   typedef          re_detail::named_subexpressions                         named_sub_type;
+   typedef          BOOST_REGEX_DETAIL_NS::named_subexpressions                         named_sub_type;
 
    // construct/copy/destroy:
    explicit match_results(const Allocator& a = Allocator())
@@ -158,7 +158,7 @@ public:
          const sub_match<BidiIterator>& s = m_subs[sub];
          if(s.matched || (sub == 2))
          {
-            return ::boost::re_detail::distance((BidiIterator)(m_base), (BidiIterator)(s.first));
+            return ::boost::BOOST_REGEX_DETAIL_NS::distance((BidiIterator)(m_base), (BidiIterator)(s.first));
          }
       }
       return ~static_cast<difference_type>(0);
@@ -237,7 +237,7 @@ public:
       //
       if(m_is_singular)
          raise_logic_error();
-      re_detail::named_subexpressions::range_type r = m_named_subs->equal_range(i, j);
+      BOOST_REGEX_DETAIL_NS::named_subexpressions::range_type r = m_named_subs->equal_range(i, j);
       while((r.first != r.second) && ((*this)[r.first->index].matched == false))
          ++r.first;
       return r.first != r.second ? (*this)[r.first->index] : m_null;
@@ -262,7 +262,7 @@ public:
       //
       if(m_is_singular)
          raise_logic_error();
-      re_detail::named_subexpressions::range_type s, r;
+      BOOST_REGEX_DETAIL_NS::named_subexpressions::range_type s, r;
       s = r = m_named_subs->equal_range(i, j);
       while((r.first != r.second) && ((*this)[r.first->index].matched == false))
          ++r.first;
@@ -345,7 +345,7 @@ public:
    {
       if(m_is_singular)
          raise_logic_error();
-      typedef typename re_detail::compute_functor_type<Functor, match_results<BidiIterator, Allocator>, OutputIterator>::type F;
+      typedef typename BOOST_REGEX_DETAIL_NS::compute_functor_type<Functor, match_results<BidiIterator, Allocator>, OutputIterator>::type F;
       F func(fmt);
       return func(*this, out, flags);
    }
@@ -355,9 +355,9 @@ public:
       if(m_is_singular)
          raise_logic_error();
       std::basic_string<char_type> result;
-      re_detail::string_out_iterator<std::basic_string<char_type> > i(result);
+      BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<char_type> > i(result);
 
-      typedef typename re_detail::compute_functor_type<Functor, match_results<BidiIterator, Allocator>, re_detail::string_out_iterator<std::basic_string<char_type> > >::type F;
+      typedef typename BOOST_REGEX_DETAIL_NS::compute_functor_type<Functor, match_results<BidiIterator, Allocator>, BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<char_type> > >::type F;
       F func(fmt);
 
       func(*this, i, flags);
@@ -373,7 +373,7 @@ public:
       if(m_is_singular)
          raise_logic_error();
       typedef ::boost::regex_traits_wrapper<typename RegexT::traits_type> traits_type;
-      typedef typename re_detail::compute_functor_type<Functor, match_results<BidiIterator, Allocator>, OutputIterator, traits_type>::type F;
+      typedef typename BOOST_REGEX_DETAIL_NS::compute_functor_type<Functor, match_results<BidiIterator, Allocator>, OutputIterator, traits_type>::type F;
       F func(fmt);
       return func(*this, out, flags, re.get_traits());
    }
@@ -386,9 +386,9 @@ public:
          raise_logic_error();
       typedef ::boost::regex_traits_wrapper<typename RegexT::traits_type> traits_type;
       std::basic_string<char_type> result;
-      re_detail::string_out_iterator<std::basic_string<char_type> > i(result);
+      BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<char_type> > i(result);
 
-      typedef typename re_detail::compute_functor_type<Functor, match_results<BidiIterator, Allocator>, re_detail::string_out_iterator<std::basic_string<char_type> >, traits_type >::type F;
+      typedef typename BOOST_REGEX_DETAIL_NS::compute_functor_type<Functor, match_results<BidiIterator, Allocator>, BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<char_type> >, traits_type >::type F;
       F func(fmt);
 
       func(*this, i, flags, re.get_traits());
@@ -639,15 +639,15 @@ void BOOST_REGEX_CALL match_results<BidiIterator, Allocator>::maybe_assign(const
          // p1 better than p2, and no need to calculate distances:
          return;
       }
-      base1 = ::boost::re_detail::distance(l_base, p1->first);
-      base2 = ::boost::re_detail::distance(l_base, p2->first);
+      base1 = ::boost::BOOST_REGEX_DETAIL_NS::distance(l_base, p1->first);
+      base2 = ::boost::BOOST_REGEX_DETAIL_NS::distance(l_base, p2->first);
       BOOST_ASSERT(base1 >= 0);
       BOOST_ASSERT(base2 >= 0);
       if(base1 < base2) return;
       if(base2 < base1) break;
 
-      len1 = ::boost::re_detail::distance((BidiIterator)p1->first, (BidiIterator)p1->second);
-      len2 = ::boost::re_detail::distance((BidiIterator)p2->first, (BidiIterator)p2->second);
+      len1 = ::boost::BOOST_REGEX_DETAIL_NS::distance((BidiIterator)p1->first, (BidiIterator)p1->second);
+      len2 = ::boost::BOOST_REGEX_DETAIL_NS::distance((BidiIterator)p2->first, (BidiIterator)p2->second);
       BOOST_ASSERT(len1 >= 0);
       BOOST_ASSERT(len2 >= 0);
       if((len1 != len2) || ((p1->matched == false) && (p2->matched == true)))
index 222142dd69cc7bd1b24d95634caaf1de54565dbc..dc54915062ee1d20d423a68dbfcd869458fc4adb 100644 (file)
@@ -28,7 +28,7 @@
 #endif
 
 namespace boost{
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 struct mem_block_node
 {
index b7b3b58e62bc5bf299e97004c7b23f179d107085..a7298fbd7a6502342ab3e8b7fadc8b8034901631 100644 (file)
@@ -31,7 +31,7 @@
 #endif
 
 namespace boost{
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 //
 // error checking API:
@@ -253,23 +253,40 @@ class repeater_count
    int state_id;
    std::size_t count;        // the number of iterations so far
    BidiIterator start_pos;   // where the last repeat started
+
+   repeater_count* unwind_until(int n, repeater_count* p, int current_recursion_id)
+   { 
+      while(p && (p->state_id != n))
+      {
+         if(-2 - current_recursion_id == p->state_id)
+            return 0;
+         p = p->next;
+         if(p && (p->state_id < 0))
+         {
+            p = unwind_until(p->state_id, p, current_recursion_id);
+            if(!p)
+               return p;
+            p = p->next;
+         }
+      }
+      return p;
+   }
 public:
    repeater_count(repeater_count** s) : stack(s), next(0), state_id(-1), count(0), start_pos() {}
-
-   repeater_count(int i, repeater_count** s, BidiIterator start)
+   
+   repeater_count(int i, repeater_count** s, BidiIterator start, int current_recursion_id)
       : start_pos(start)
    {
       state_id = i;
       stack = s;
       next = *stack;
       *stack = this;
-      if(state_id > next->state_id)
+      if((state_id > next->state_id) && (next->state_id >= 0))
          count = 0;
       else
       {
          repeater_count* p = next;
-         while(p && (p->state_id != state_id))
-            p = p->next;
+         p = unwind_until(state_id, p, current_recursion_id);
          if(p)
          {
             count = p->count;
@@ -426,6 +443,11 @@ private:
    bool backtrack_till_match(std::size_t count);
 #endif
    bool match_recursion();
+   bool match_fail();
+   bool match_accept();
+   bool match_commit();
+   bool match_then();
+   bool skip_until_paren(int index, bool match = true);
 
    // find procs stored in s_find_vtable:
    bool find_restart_any();
@@ -483,7 +505,12 @@ private:
    unsigned char match_any_mask;
    // recursion information:
    std::vector<recursion_info<results_type> > recursion_stack;
-
+#ifdef BOOST_REGEX_RECURSIVE
+   // Set to false by a (*COMMIT):
+   bool m_can_backtrack;
+   bool m_have_accept;
+   bool m_have_then;
+#endif
 #ifdef BOOST_REGEX_NON_RECURSIVE
    //
    // additional members for non-recursive version:
@@ -508,6 +535,8 @@ private:
    bool unwind_non_greedy_repeat(bool);
    bool unwind_recursion(bool);
    bool unwind_recursion_pop(bool);
+   bool unwind_commit(bool);
+   bool unwind_then(bool);
    void destroy_single_repeat();
    void push_matched_paren(int index, const sub_match<BidiIterator>& sub);
    void push_recursion_stopper();
@@ -523,11 +552,17 @@ private:
    saved_state* m_stack_base;
    // pointer to current stack position:
    saved_state* m_backup_state;
+   // how many memory blocks have we used up?:
+   unsigned used_block_count;
    // determines what value to return when unwinding from recursion,
    // allows for mixed recursive/non-recursive algorithm:
    bool m_recursive_result;
-   // how many memory blocks have we used up?:
-   unsigned used_block_count;
+   // We have unwound to a lookahead/lookbehind, used by COMMIT/PRUNE/SKIP:
+   bool m_unwound_lookahead;
+   // We have unwound to an alternative, used by THEN:
+   bool m_unwound_alt;
+   // We are unwinding a commit - used by independent subs to determine whether to stop there or carry on unwinding:
+   //bool m_unwind_commit;
 #endif
 
    // these operations aren't allowed, so are declared private,
@@ -544,7 +579,7 @@ private:
 #pragma warning(pop)
 #endif
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 
 #ifdef BOOST_MSVC
 #pragma warning(push)
index 480d8f145de766a2b5080705dee903a12d412c68..f3949ccf93010d79e0e2e4e6bb225ddffa761b21 100644 (file)
@@ -40,7 +40,7 @@
 #endif
 
 namespace boost{
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 template <class BidiIterator, class Allocator, class traits>
 void perl_matcher<BidiIterator, Allocator, traits>::construct_init(const basic_regex<char_type, traits>& e, match_flag_type f)
@@ -80,11 +80,17 @@ void perl_matcher<BidiIterator, Allocator, traits>::construct_init(const basic_r
 #ifdef BOOST_REGEX_NON_RECURSIVE
    m_stack_base = 0;
    m_backup_state = 0;
+#elif defined(BOOST_REGEX_RECURSIVE)
+   m_can_backtrack = true;
+   m_have_accept = false;
 #endif
    // find the value to use for matching word boundaries:
    m_word_mask = re.get_data().m_word_mask; 
    // find bitmask to use for matching '.':
-   match_any_mask = static_cast<unsigned char>((f & match_not_dot_newline) ? re_detail::test_not_newline : re_detail::test_newline);
+   match_any_mask = static_cast<unsigned char>((f & match_not_dot_newline) ? BOOST_REGEX_DETAIL_NS::test_not_newline : BOOST_REGEX_DETAIL_NS::test_newline);
+   // Disable match_any if requested in the state machine:
+   if(e.get_data().m_disable_match_any)
+      m_match_flags &= ~regex_constants::match_any;
 }
 
 template <class BidiIterator, class Allocator, class traits>
@@ -101,7 +107,7 @@ void perl_matcher<BidiIterator, Allocator, traits>::estimate_max_state_count(std
    // Calculate NS^2 first:
    //
    static const std::ptrdiff_t k = 100000;
-   std::ptrdiff_t dist = boost::re_detail::distance(base, last);
+   std::ptrdiff_t dist = boost::BOOST_REGEX_DETAIL_NS::distance(base, last);
    if(dist == 0)
       dist = 1;
    std::ptrdiff_t states = re.size();
@@ -165,7 +171,7 @@ template <class BidiIterator, class Allocator, class traits>
 inline bool perl_matcher<BidiIterator, Allocator, traits>::protected_call(
    protected_proc_type proc)
 {
-   ::boost::re_detail::concrete_protected_call
+   ::boost::BOOST_REGEX_DETAIL_NS::concrete_protected_call
       <perl_matcher<BidiIterator, Allocator, traits> >
       obj(this, proc);
    return obj.execute();
@@ -348,6 +354,9 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_prefix()
 #endif
    if(!m_has_found_match)
       position = restart; // reset search postion
+#ifdef BOOST_REGEX_RECURSIVE
+   m_can_backtrack = true; // reset for further searches
+#endif
    return m_has_found_match;
 }
 
@@ -703,7 +712,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_backstep()
 #endif
    if( ::boost::is_random_access_iterator<BidiIterator>::value)
    {
-      std::ptrdiff_t maxlen = ::boost::re_detail::distance(backstop, position);
+      std::ptrdiff_t maxlen = ::boost::BOOST_REGEX_DETAIL_NS::distance(backstop, position);
       if(maxlen < static_cast<const re_brace*>(pstate)->index)
          return false;
       std::advance(position, -static_cast<const re_brace*>(pstate)->index);
@@ -793,6 +802,25 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case()
    return true;
 }
 
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_fail()
+{
+   // Just force a backtrack:
+   return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_accept()
+{
+   if(!recursion_stack.empty())
+   {
+      return skip_until_paren(recursion_stack.back().idx);
+   }
+   else
+   {
+      return skip_until_paren(INT_MAX);
+   }
+}
 
 template <class BidiIterator, class Allocator, class traits>
 bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_any()
@@ -966,7 +994,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_lit()
    return false;
 }
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 
 } // namespace boost
 
index 5c1f7a98b0ed4ca52970347d46af5e40e7e13a94..bf77eaa57b6f5766394747b8191a62f2ef33640b 100644 (file)
 #endif
 #ifdef BOOST_MSVC
 #  pragma warning(push)
-#  pragma warning(disable: 4800)
+#  pragma warning(disable: 4800 4706)
 #endif
 
 namespace boost{
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 template <class T>
 inline void inplace_destroy(T* p)
@@ -87,8 +87,8 @@ template <class BidiIterator>
 struct saved_repeater : public saved_state
 {
    repeater_count<BidiIterator> count;
-   saved_repeater(int i, repeater_count<BidiIterator>** s, BidiIterator start
-      : saved_state(saved_state_repeater_count), count(i,s,start){}
+   saved_repeater(int i, repeater_count<BidiIterator>** s, BidiIterator start, int current_recursion_id)
+      : saved_state(saved_state_repeater_count), count(i, s, start, current_recursion_id){}
 };
 
 struct saved_extra_block : public saved_state
@@ -141,7 +141,7 @@ struct saved_recursion : public saved_state
 template <class BidiIterator, class Allocator, class traits>
 bool perl_matcher<BidiIterator, Allocator, traits>::match_all_states()
 {
-   static matcher_proc_type const s_match_vtable[30] = 
+   static matcher_proc_type const s_match_vtable[34] = 
    {
       (&perl_matcher<BidiIterator, Allocator, traits>::match_startmark),
       &perl_matcher<BidiIterator, Allocator, traits>::match_endmark,
@@ -177,6 +177,10 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_all_states()
       &perl_matcher<BidiIterator, Allocator, traits>::match_assert_backref,
       &perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case,
       &perl_matcher<BidiIterator, Allocator, traits>::match_recursion,
+      &perl_matcher<BidiIterator, Allocator, traits>::match_fail,
+      &perl_matcher<BidiIterator, Allocator, traits>::match_accept,
+      &perl_matcher<BidiIterator, Allocator, traits>::match_commit,
+      &perl_matcher<BidiIterator, Allocator, traits>::match_then,
    };
 
    push_recursion_stopper();
@@ -309,7 +313,7 @@ inline void perl_matcher<BidiIterator, Allocator, traits>::push_repeater_count(i
       pmp = static_cast<saved_repeater<BidiIterator>*>(m_backup_state);
       --pmp;
    }
-   (void) new (pmp)saved_repeater<BidiIterator>(i, s, position);
+   (void) new (pmp)saved_repeater<BidiIterator>(i, s, position, this->recursion_stack.size() ? this->recursion_stack.back().idx : (INT_MIN + 3));
    m_backup_state = pmp;
 }
 
@@ -370,6 +374,13 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark()
          const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
          pstate = pstate->next.p->next.p;
          bool r = match_all_states();
+         if(!r && !m_independent)
+         {
+            // Must be unwinding from a COMMIT/SKIP/PRUNE and the independent 
+            // sub failed, need to unwind everything else:
+            while(unwind(false));
+            return false;
+         }
          pstate = next_pstate;
          m_independent = old_independent;
 #ifdef BOOST_REGEX_MATCH_EXTRA
@@ -652,7 +663,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_fast()
 
    const re_repeat* rep = static_cast<const re_repeat*>(pstate);
    bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);   
-   unsigned count = static_cast<unsigned>((std::min)(static_cast<unsigned>(::boost::re_detail::distance(position, last)), static_cast<unsigned>(greedy ? rep->max : rep->min)));
+   unsigned count = static_cast<unsigned>((std::min)(static_cast<unsigned>(::boost::BOOST_REGEX_DETAIL_NS::distance(position, last)), static_cast<unsigned>(greedy ? rep->max : rep->min)));
    if(rep->min > count)
    {
       position = last;
@@ -705,7 +716,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat()
       BidiIterator end = position;
       // Move end forward by "desired", preferably without using distance or advance if we can
       // as these can be slow for some iterator types.
-      std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::re_detail::distance(position, last);
+      std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::BOOST_REGEX_DETAIL_NS::distance(position, last);
       if(desired >= len)
          end = last;
       else
@@ -715,7 +726,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat()
       {
          ++position;
       }
-      count = (unsigned)::boost::re_detail::distance(origin, position);
+      count = (unsigned)::boost::BOOST_REGEX_DETAIL_NS::distance(origin, position);
    }
    else
    {
@@ -779,7 +790,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat()
       BidiIterator end = position;
       // Move end forward by "desired", preferably without using distance or advance if we can
       // as these can be slow for some iterator types.
-      std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::re_detail::distance(position, last);
+      std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::BOOST_REGEX_DETAIL_NS::distance(position, last);
       if(desired >= len)
          end = last;
       else
@@ -789,7 +800,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat()
       {
          ++position;
       }
-      count = (unsigned)::boost::re_detail::distance(origin, position);
+      count = (unsigned)::boost::BOOST_REGEX_DETAIL_NS::distance(origin, position);
    }
    else
    {
@@ -854,7 +865,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat()
       BidiIterator end = position;
       // Move end forward by "desired", preferably without using distance or advance if we can
       // as these can be slow for some iterator types.
-      std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::re_detail::distance(position, last);
+      std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::BOOST_REGEX_DETAIL_NS::distance(position, last);
       if(desired >= len)
          end = last;
       else
@@ -864,7 +875,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat()
       {
          ++position;
       }
-      count = (unsigned)::boost::re_detail::distance(origin, position);
+      count = (unsigned)::boost::BOOST_REGEX_DETAIL_NS::distance(origin, position);
    }
    else
    {
@@ -923,12 +934,12 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_recursion()
    recursion_stack.push_back(recursion_info<results_type>());
    recursion_stack.back().preturn_address = pstate->next.p;
    recursion_stack.back().results = *m_presult;
-   if(static_cast<const re_recurse*>(pstate)->state_id > 0)
-   {
-      push_repeater_count(static_cast<const re_recurse*>(pstate)->state_id, &next_count);
-   }
    pstate = static_cast<const re_jump*>(pstate)->alt.p;
    recursion_stack.back().idx = static_cast<const re_brace*>(pstate)->index;
+   //if(static_cast<const re_recurse*>(pstate)->state_id > 0)
+   {
+      push_repeater_count(-(2 + static_cast<const re_brace*>(pstate)->index), &next_count);
+   }
 
    return true;
 }
@@ -952,6 +963,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_endmark()
             *m_presult = recursion_stack.back().results;
             push_recursion(recursion_stack.back().idx, recursion_stack.back().preturn_address, &recursion_stack.back().results);
             recursion_stack.pop_back();
+            push_repeater_count(-(2 + index), &next_count);
          }
       }
    }
@@ -1003,6 +1015,103 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_match()
    return true;
 }
 
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_commit()
+{
+   // Ideally we would just junk all the states that are on the stack,
+   // however we might not unwind correctly in that case, so for now,
+   // just mark that we don't backtrack into whatever is left (or rather
+   // we'll unwind it unconditionally without pausing to try other matches).
+
+   switch(static_cast<const re_commit*>(pstate)->action)
+   {
+   case commit_commit:
+      restart = last;
+      break;
+   case commit_skip:
+      if(base != position)
+      {
+         restart = position;
+         // Have to decrement restart since it will get incremented again later:
+         --restart;
+      }
+      break;
+   case commit_prune:
+      break;
+   }
+
+   saved_state* pmp = m_backup_state;
+   --pmp;
+   if(pmp < m_stack_base)
+   {
+      extend_stack();
+      pmp = m_backup_state;
+      --pmp;
+   }
+   (void) new (pmp)saved_state(16);
+   m_backup_state = pmp;
+   pstate = pstate->next.p;
+   return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_then()
+{
+   // Just leave a mark that we need to skip to next alternative:
+   saved_state* pmp = m_backup_state;
+   --pmp;
+   if(pmp < m_stack_base)
+   {
+      extend_stack();
+      pmp = m_backup_state;
+      --pmp;
+   }
+   (void) new (pmp)saved_state(17);
+   m_backup_state = pmp;
+   pstate = pstate->next.p;
+   return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::skip_until_paren(int index, bool have_match)
+{
+   while(pstate)
+   {
+      if(pstate->type == syntax_element_endmark)
+      {
+         if(static_cast<const re_brace*>(pstate)->index == index)
+         {
+            if(have_match)
+               return this->match_endmark();
+            pstate = pstate->next.p;
+            return true;
+         }
+         else
+         {
+            // Unenclosed closing ), occurs when (*ACCEPT) is inside some other 
+            // parenthesis which may or may not have other side effects associated with it.
+            match_endmark();
+            if(!pstate)
+            {
+               unwind(true);
+            }
+         }
+         continue;
+      }
+      else if(pstate->type == syntax_element_match)
+         return true;
+      else if(pstate->type == syntax_element_startmark)
+      {
+         int idx = static_cast<const re_brace*>(pstate)->index;
+         pstate = pstate->next.p;
+         skip_until_paren(idx, false);
+         continue;
+      }
+      pstate = pstate->next.p;
+   }
+   return true;
+}
+
 /****************************************************************************
 
 Unwind and associated proceedures follow, these perform what normal stack
@@ -1013,7 +1122,7 @@ unwinding does in the recursive implementation.
 template <class BidiIterator, class Allocator, class traits>
 bool perl_matcher<BidiIterator, Allocator, traits>::unwind(bool have_match)
 {
-   static unwind_proc_type const s_unwind_table[18] = 
+   static unwind_proc_type const s_unwind_table[19] = 
    {
       &perl_matcher<BidiIterator, Allocator, traits>::unwind_end,
       &perl_matcher<BidiIterator, Allocator, traits>::unwind_paren,
@@ -1031,9 +1140,13 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind(bool have_match)
       &perl_matcher<BidiIterator, Allocator, traits>::unwind_non_greedy_repeat,
       &perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion,
       &perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_pop,
+      &perl_matcher<BidiIterator, Allocator, traits>::unwind_commit,
+      &perl_matcher<BidiIterator, Allocator, traits>::unwind_then,
    };
 
    m_recursive_result = have_match;
+   m_unwound_lookahead = false;
+   m_unwound_alt = false;
    unwind_proc_type unwinder;
    bool cont;
    //
@@ -1076,14 +1189,14 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_paren(bool have_match
 #endif
    // unwind stack:
    m_backup_state = pmp+1;
-   boost::re_detail::inplace_destroy(pmp);
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp);
    return true; // keep looking
 }
 
 template <class BidiIterator, class Allocator, class traits>
 bool perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_stopper(bool)
 {
-   boost::re_detail::inplace_destroy(m_backup_state++);
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(m_backup_state++);
    pstate = 0;   // nothing left to search
    return false; // end of stack nothing more to search
 }
@@ -1096,8 +1209,9 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_assertion(bool r)
    position = pmp->position;
    bool result = (r == pmp->positive);
    m_recursive_result = pmp->positive ? r : !r;
-   boost::re_detail::inplace_destroy(pmp++);
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
    m_backup_state = pmp;
+   m_unwound_lookahead = true;
    return !result; // return false if the assertion was matched to stop search.
 }
 
@@ -1110,8 +1224,9 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_alt(bool r)
       pstate = pmp->pstate;
       position = pmp->position;
    }
-   boost::re_detail::inplace_destroy(pmp++);
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
    m_backup_state = pmp;
+   m_unwound_alt = !r;
    return r; 
 }
 
@@ -1119,7 +1234,7 @@ template <class BidiIterator, class Allocator, class traits>
 bool perl_matcher<BidiIterator, Allocator, traits>::unwind_repeater_counter(bool)
 {
    saved_repeater<BidiIterator>* pmp = static_cast<saved_repeater<BidiIterator>*>(m_backup_state);
-   boost::re_detail::inplace_destroy(pmp++);
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
    m_backup_state = pmp;
    return true; // keep looking
 }
@@ -1131,7 +1246,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_extra_block(bool)
    void* condemmed = m_stack_base;
    m_stack_base = pmp->base;
    m_backup_state = pmp->end;
-   boost::re_detail::inplace_destroy(pmp);
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp);
    put_mem_block(condemmed);
    return true; // keep looking
 }
@@ -1140,7 +1255,7 @@ template <class BidiIterator, class Allocator, class traits>
 inline void perl_matcher<BidiIterator, Allocator, traits>::destroy_single_repeat()
 {
    saved_single_repeat<BidiIterator>* p = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
-   boost::re_detail::inplace_destroy(p++);
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(p++);
    m_backup_state = p;
 }
 
@@ -1532,7 +1647,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_non_greedy_repeat(boo
       pstate = pmp->pstate;
       ++(*next_count);
    }
-   boost::re_detail::inplace_destroy(pmp++);
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
    m_backup_state = pmp;
    return r;
 }
@@ -1548,7 +1663,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion(bool r)
       recursion_stack.back().preturn_address = pmp->preturn_address;
       recursion_stack.back().results = pmp->results;
    }
-   boost::re_detail::inplace_destroy(pmp++);
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
    m_backup_state = pmp;
    return true;
 }
@@ -1561,7 +1676,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_pop(bool r)
    {
       recursion_stack.pop_back();
    }
-   boost::re_detail::inplace_destroy(pmp++);
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
    m_backup_state = pmp;
    return true;
 }
@@ -1580,6 +1695,48 @@ void perl_matcher<BidiIterator, Allocator, traits>::push_recursion_pop()
    (void) new (pmp)saved_state(15);
    m_backup_state = pmp;
 }
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_commit(bool b)
+{
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(m_backup_state++);
+   while(unwind(b) && !m_unwound_lookahead){}
+   if(m_unwound_lookahead && pstate)
+   {
+      //
+      // If we stop because we just unwound an assertion, put the
+      // commit state back on the stack again:
+      //
+      saved_state* pmp = m_backup_state;
+      --pmp;
+      if(pmp < m_stack_base)
+      {
+         extend_stack();
+         pmp = m_backup_state;
+         --pmp;
+      }
+      (void) new (pmp)saved_state(16);
+      m_backup_state = pmp;
+   }
+   // This prevents us from stopping when we exit from an independent sub-expression:
+   m_independent = false;
+   return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_then(bool b)
+{
+   // Unwind everything till we hit an alternative:
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(m_backup_state++);
+   bool result = false;
+   while((result = unwind(b)) && !m_unwound_alt){}
+   // We're now pointing at the next alternative, need one more backtrack 
+   // since *all* the other alternatives must fail once we've reached a THEN clause:
+   if(result && m_unwound_alt)
+      unwind(b);
+   return false;
+}
+
 /*
 template <class BidiIterator, class Allocator, class traits>
 bool perl_matcher<BidiIterator, Allocator, traits>::unwind_parenthesis_pop(bool r)
@@ -1589,7 +1746,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_parenthesis_pop(bool
    {
       --parenthesis_stack_position;
    }
-   boost::re_detail::inplace_destroy(pmp++);
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
    m_backup_state = pmp;
    return true;
 }
@@ -1617,7 +1774,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_parenthesis_push(bool
    {
       parenthesis_stack[parenthesis_stack_position++] = pmp->position;
    }
-   boost::re_detail::inplace_destroy(pmp++);
+   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
    m_backup_state = pmp;
    return true;
 }
@@ -1637,7 +1794,7 @@ inline void perl_matcher<BidiIterator, Allocator, traits>::push_parenthesis_push
    m_backup_state = pmp;
 }
 */
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 } // namespace boost
 
 #ifdef BOOST_MSVC
index 8e0e182b566b9921d540fed83d8a7d10be3267c8..3893837df3acffb43502b199c0e28af05f1ed6c8 100644 (file)
@@ -37,7 +37,7 @@
 #endif
 
 namespace boost{
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 template <class BidiIterator>
 class backup_subex
@@ -60,7 +60,7 @@ public:
 template <class BidiIterator, class Allocator, class traits>
 bool perl_matcher<BidiIterator, Allocator, traits>::match_all_states()
 {
-   static matcher_proc_type const s_match_vtable[30] = 
+   static matcher_proc_type const s_match_vtable[34] = 
    {
       (&perl_matcher<BidiIterator, Allocator, traits>::match_startmark),
       &perl_matcher<BidiIterator, Allocator, traits>::match_endmark,
@@ -96,6 +96,10 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_all_states()
       &perl_matcher<BidiIterator, Allocator, traits>::match_assert_backref,
       &perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case,
       &perl_matcher<BidiIterator, Allocator, traits>::match_recursion,
+      &perl_matcher<BidiIterator, Allocator, traits>::match_fail,
+      &perl_matcher<BidiIterator, Allocator, traits>::match_accept,
+      &perl_matcher<BidiIterator, Allocator, traits>::match_commit,
+      &perl_matcher<BidiIterator, Allocator, traits>::match_then,
    };
 
    if(state_count > max_state_count)
@@ -139,6 +143,8 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark()
             r = false;
          else
             r = true;
+         if(r && m_have_accept)
+            r = skip_until_paren(INT_MAX);
          break;
       }
    case -3:
@@ -148,7 +154,10 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark()
          m_independent = true;
          const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
          pstate = pstate->next.p->next.p;
+         bool can_backtrack = m_can_backtrack;
          r = match_all_states();
+         if(r)
+            m_can_backtrack = can_backtrack;
          pstate = next_pstate;
          m_independent = old_independent;
 #ifdef BOOST_REGEX_MATCH_EXTRA
@@ -178,6 +187,8 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark()
             }
          }
 #endif
+         if(r && m_have_accept)
+            r = skip_until_paren(INT_MAX);
          break;
       }
    case -4:
@@ -278,12 +289,20 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_alt()
          BidiIterator oldposition(position);
          const re_syntax_base* old_pstate = jmp->alt.p;
          pstate = pstate->next.p;
+         m_have_then = false;
          if(!match_all_states())
          {
             pstate = old_pstate;
             position = oldposition;
+            if(m_have_then)
+            {
+               m_can_backtrack = true;
+               m_have_then = false;
+               return false;
+            }
          }
-         return true;
+         m_have_then = false;
+         return m_can_backtrack;
       }
       pstate = pstate->next.p;
       return true;
@@ -308,7 +327,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_rep()
    // Always copy the repeat count, so that the state is restored
    // when we exit this scope:
    //
-   repeater_count<BidiIterator> r(rep->state_id, &next_count, position);
+   repeater_count<BidiIterator> r(rep->state_id, &next_count, position, this->recursion_stack.size() ? this->recursion_stack.back().idx : INT_MIN + 3);
    //
    // If we've had at least one repeat already, and the last one 
    // matched the NULL string then set the repeat count to
@@ -354,6 +373,8 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_rep()
          pstate = rep->next.p;
          if(match_all_states())
             return true;
+         if(!m_can_backtrack)
+            return false;
          // failed repeat, reset posistion and fall through for alternative:
          position = pos;
       }
@@ -374,6 +395,8 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_rep()
          pstate = rep->alt.p;
          if(match_all_states())
             return true;
+         if(!m_can_backtrack)
+            return false;
          // failed alternative, reset posistion and fall through for repeat:
          position = pos;
       }
@@ -438,7 +461,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_slow()
          ++state_count;
          if(match_all_states())
             return true;
-         if(count >= rep->max)
+         if((count >= rep->max) || !m_can_backtrack)
             return false;
          ++count;
          pstate = psingle;
@@ -472,7 +495,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_fast()
 #pragma warning(disable:4267)
 #endif
    bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);   
-   std::size_t count = (std::min)(static_cast<std::size_t>(::boost::re_detail::distance(position, last)), static_cast<std::size_t>(greedy ? rep->max : rep->min));
+   std::size_t count = (std::min)(static_cast<std::size_t>(::boost::BOOST_REGEX_DETAIL_NS::distance(position, last)), static_cast<std::size_t>(greedy ? rep->max : rep->min));
    if(rep->min > count)
    {
       position = last;
@@ -503,7 +526,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_fast()
       ++state_count;
       if(match_all_states())
          return true;
-      if(count >= rep->max)
+      if((count >= rep->max) || !m_can_backtrack)
          return false;
       if(save_pos == last)
          return false;
@@ -539,7 +562,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat()
       desired = 
          (std::min)(
             (std::size_t)(greedy ? rep->max : rep->min),
-            (std::size_t)::boost::re_detail::distance(position, last));
+            (std::size_t)::boost::BOOST_REGEX_DETAIL_NS::distance(position, last));
       count = desired;
       ++desired;
       if(icase)
@@ -597,7 +620,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat()
       ++state_count;
       if(match_all_states())
          return true;
-      if(count >= rep->max)
+      if((count >= rep->max) || !m_can_backtrack)
          return false;
       position = save_pos;
       if(position == last)
@@ -643,7 +666,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat()
       BidiIterator end = position;
       // Move end forward by "desired", preferably without using distance or advance if we can
       // as these can be slow for some iterator types.
-      std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::re_detail::distance(position, last);
+      std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::BOOST_REGEX_DETAIL_NS::distance(position, last);
       if(desired >= len)
          end = last;
       else
@@ -653,7 +676,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat()
       {
          ++position;
       }
-      count = (unsigned)::boost::re_detail::distance(origin, position);
+      count = (unsigned)::boost::BOOST_REGEX_DETAIL_NS::distance(origin, position);
    }
    else
    {
@@ -692,7 +715,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat()
       ++state_count;
       if(match_all_states())
          return true;
-      if(count >= rep->max)
+      if((count >= rep->max) || !m_can_backtrack)
          return false;
       position = save_pos;
       if(position == last)
@@ -739,7 +762,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat()
       BidiIterator end = position;
       // Move end forward by "desired", preferably without using distance or advance if we can
       // as these can be slow for some iterator types.
-      std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::re_detail::distance(position, last);
+      std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::BOOST_REGEX_DETAIL_NS::distance(position, last);
       if(desired >= len)
          end = last;
       else
@@ -749,7 +772,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat()
       {
          ++position;
       }
-      count = (unsigned)::boost::re_detail::distance(origin, position);
+      count = (unsigned)::boost::BOOST_REGEX_DETAIL_NS::distance(origin, position);
    }
    else
    {
@@ -788,7 +811,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat()
       ++state_count;
       if(match_all_states())
          return true;
-      if(count >= rep->max)
+      if((count >= rep->max) || !m_can_backtrack)
          return false;
       position = save_pos;
       if(position == last)
@@ -818,6 +841,8 @@ bool perl_matcher<BidiIterator, Allocator, traits>::backtrack_till_match(std::si
 #pragma warning(push)
 #pragma warning(disable:4127)
 #endif
+   if(!m_can_backtrack)
+      return false;
    if((m_match_flags & match_partial) && (position == last))
       m_has_partial_match = true;
 
@@ -883,7 +908,9 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_recursion()
    repeater_count<BidiIterator>* saved = next_count;
    repeater_count<BidiIterator> r(&next_count); // resets all repeat counts since we're recursing and starting fresh on those
    next_count = &r;
+   bool can_backtrack = m_can_backtrack;
    bool result = match_all_states();
+   m_can_backtrack = can_backtrack;
    next_count = saved;
 
    if(!result)
@@ -980,9 +1007,76 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_match()
    return true;
 }
 
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_commit()
+{
+   m_can_backtrack = false;
+   int action = static_cast<const re_commit*>(pstate)->action;
+   switch(action)
+   {
+   case commit_commit:
+      restart = last;
+      break;
+   case commit_skip:
+      restart = position;
+      break;
+   }
+   pstate = pstate->next.p;
+   return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_then()
+{
+   pstate = pstate->next.p;
+   if(match_all_states())
+      return true;
+   m_can_backtrack = false;
+   m_have_then = true;
+   return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::skip_until_paren(int index, bool have_match)
+{
+   while(pstate)
+   {
+      if(pstate->type == syntax_element_endmark)
+      {
+         if(static_cast<const re_brace*>(pstate)->index == index)
+         {
+            if(have_match)
+               return this->match_endmark();
+            pstate = pstate->next.p;
+            return true;
+         }
+         else
+         {
+            // Unenclosed closing ), occurs when (*ACCEPT) is inside some other 
+            // parenthesis which may or may not have other side effects associated with it.
+            bool r = match_endmark();
+            m_have_accept = true;
+            if(!pstate)
+               return r;
+         }
+         continue;
+      }
+      else if(pstate->type == syntax_element_match)
+         return true;
+      else if(pstate->type == syntax_element_startmark)
+      {
+         int idx = static_cast<const re_brace*>(pstate)->index;
+         pstate = pstate->next.p;
+         skip_until_paren(idx, false);
+         continue;
+      }
+      pstate = pstate->next.p;
+   }
+   return true;
+}
 
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 } // namespace boost
 #ifdef BOOST_MSVC
 #pragma warning(pop)
index 989f500c1d57600bc2f41aa63229bc877a4df2ba..3e7cac549bd8a00603ad15b9d977402a77c4652a 100644 (file)
@@ -32,7 +32,7 @@
 #endif
 
 namespace boost{
-   namespace re_detail{
+   namespace BOOST_REGEX_DETAIL_NS{
 
 
 enum{
@@ -122,7 +122,7 @@ unsigned find_sort_syntax(const traits* pt, charT* delim)
 }
 
 
-   } // namespace re_detail
+   } // namespace BOOST_REGEX_DETAIL_NS
 } // namespace boost
 
 #ifdef BOOST_MSVC
index ebf15ba37009d8f89ef120825f7031efca943f54..9d47514f81ca81af8b6874285be503a281e9a304 100644 (file)
@@ -32,7 +32,7 @@
 #endif
 
 namespace boost{
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 class BOOST_REGEX_DECL abstract_protected_call
 {
index a34c40ad24e1faa0191f629ba70a4e14a0706608..e9006a7bd2ad996287068a106945b8be2b371920 100644 (file)
@@ -55,7 +55,7 @@ namespace boost{
    template <class BidiIterator, class Allocator = BOOST_DEDUCED_TYPENAME std::vector<sub_match<BidiIterator> >::allocator_type >
 class match_results;
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 //
 // struct trivial_format_traits:
@@ -73,11 +73,11 @@ struct trivial_format_traits
    }
    static charT tolower(charT c)
    {
-      return ::boost::re_detail::global_lower(c);
+      return ::boost::BOOST_REGEX_DETAIL_NS::global_lower(c);
    }
    static charT toupper(charT c)
    {
-      return ::boost::re_detail::global_upper(c);
+      return ::boost::BOOST_REGEX_DETAIL_NS::global_upper(c);
    }
    static int value(const charT c, int radix)
    {
@@ -359,7 +359,7 @@ void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::format
    default:
       // see if we have a number:
       {
-         std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
+         std::ptrdiff_t len = ::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end);
          //len = (std::min)(static_cast<std::ptrdiff_t>(2), len);
          int v = this->toi(m_position, m_position + len, 10);
          if((v < 0) || (have_brace && ((m_position == m_end) || (*m_position != '}'))))
@@ -570,7 +570,7 @@ void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::format
       }
       else
       {
-         std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
+         std::ptrdiff_t len = ::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end);
          len = (std::min)(static_cast<std::ptrdiff_t>(2), len);
          int val = this->toi(m_position, m_position + len, 16);
          if(val < 0)
@@ -634,7 +634,7 @@ void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::format
             break;
       }
       // see if we have a \n sed style backreference:
-      std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
+      std::ptrdiff_t len = ::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end);
       len = (std::min)(static_cast<std::ptrdiff_t>(1), len);
       int v = this->toi(m_position, m_position+len, 10);
       if((v > 0) || ((v == 0) && (m_flags & ::boost::regex_constants::format_sed)))
@@ -646,7 +646,7 @@ void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::format
       {
          // octal ecape sequence:
          --m_position;
-         len = ::boost::re_detail::distance(m_position, m_end);
+         len = ::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end);
          len = (std::min)(static_cast<std::ptrdiff_t>(4), len);
          v = this->toi(m_position, m_position + len, 8);
          BOOST_ASSERT(v >= 0);
@@ -693,7 +693,7 @@ void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::format
    }
    else
    {
-      std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
+      std::ptrdiff_t len = ::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end);
       len = (std::min)(static_cast<std::ptrdiff_t>(2), len);
       v = this->toi(m_position, m_position + len, 10);
    }
@@ -835,10 +835,10 @@ OutputIterator regex_format_imp(OutputIterator out,
 {
    if(flags & regex_constants::format_literal)
    {
-      return re_detail::copy(p1, p2, out);
+      return BOOST_REGEX_DETAIL_NS::copy(p1, p2, out);
    }
 
-   re_detail::basic_regex_formatter<
+   BOOST_REGEX_DETAIL_NS::basic_regex_formatter<
       OutputIterator, 
       match_results<Iterator, Alloc>, 
       traits, ForwardIter> f(out, m, t);
@@ -1028,7 +1028,7 @@ struct format_functor1
    template <class S, class OutputIter>
    OutputIter do_format_string(const S& s, OutputIter i)
    {
-      return re_detail::copy(s.begin(), s.end(), i);
+      return BOOST_REGEX_DETAIL_NS::copy(s.begin(), s.end(), i);
    }
    template <class S, class OutputIter>
    inline OutputIter do_format_string(const S* s, OutputIter i)
@@ -1085,7 +1085,7 @@ struct format_functor_container
    OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits& t = Traits())
    {
       //typedef typename Match::char_type char_type;
-      return re_detail::regex_format_imp(i, m, func.begin(), func.end(), f, t);
+      return BOOST_REGEX_DETAIL_NS::regex_format_imp(i, m, func.begin(), func.end(), f, t);
    }
 private:
    const Container& func;
@@ -1093,7 +1093,7 @@ private:
    format_functor_container& operator=(const format_functor_container&);
 };
 
-template <class Func, class Match, class OutputIterator, class Traits = re_detail::trivial_format_traits<typename Match::char_type> >
+template <class Func, class Match, class OutputIterator, class Traits = BOOST_REGEX_DETAIL_NS::trivial_format_traits<typename Match::char_type> >
 struct compute_functor_type
 {
    typedef typename format_traits<Func, Match, OutputIterator>::type tag;
@@ -1114,7 +1114,7 @@ struct compute_functor_type
    >::type type;
 };
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 
 template <class OutputIterator, class Iterator, class Allocator, class Functor>
 inline OutputIterator regex_format(OutputIterator out,
index 3a3d906ecb8116c1e32a2be472534ddcdd139742..c5cb054e58e90dee40d7703c4bd2d8bf9a348a0c 100644 (file)
@@ -50,7 +50,7 @@ inline unsigned int regex_grep(Predicate foo,
    typedef typename match_results<BidiIterator>::allocator_type match_allocator_type;
 
    match_results<BidiIterator> m;
-   re_detail::perl_matcher<BidiIterator, match_allocator_type, traits> matcher(first, last, m, e, flags, first);
+   BOOST_REGEX_DETAIL_NS::perl_matcher<BidiIterator, match_allocator_type, traits> matcher(first, last, m, e, flags, first);
    unsigned int count = 0;
    while(matcher.find())
    {
index 09e75c697d49c11ec2b3de385dfa5ab9a9e2cf85..0d10a1b98f9b8ba45af6f55f57f3281d9c0439d5 100644 (file)
@@ -82,14 +82,14 @@ private:
 };
 
 template <class BidirectionalIterator, 
-          class charT = BOOST_DEDUCED_TYPENAME re_detail::regex_iterator_traits<BidirectionalIterator>::value_type,
+          class charT = BOOST_DEDUCED_TYPENAME BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::value_type,
           class traits = regex_traits<charT> >
 class regex_iterator 
 #ifndef BOOST_NO_STD_ITERATOR
    : public std::iterator<
          std::forward_iterator_tag, 
          match_results<BidirectionalIterator>,
-         typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type,
+         typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type,
          const match_results<BidirectionalIterator>*,
          const match_results<BidirectionalIterator>& >         
 #endif
@@ -100,7 +100,7 @@ private:
 public:
    typedef          basic_regex<charT, traits>                   regex_type;
    typedef          match_results<BidirectionalIterator>                    value_type;
-   typedef typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type 
+   typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type 
                                                                             difference_type;
    typedef          const value_type*                                       pointer;
    typedef          const value_type&                                       reference; 
index e947a152255bd64734cee8d662d89afcc16ec6e6..a50daa2aa5ef012a345f76cbfe3bd947c732b27b 100644 (file)
@@ -46,7 +46,7 @@ bool regex_match(BidiIterator first, BidiIterator last,
                  const basic_regex<charT, traits>& e, 
                  match_flag_type flags = match_default)
 {
-   re_detail::perl_matcher<BidiIterator, Allocator, traits> matcher(first, last, m, e, flags, first);
+   BOOST_REGEX_DETAIL_NS::perl_matcher<BidiIterator, Allocator, traits> matcher(first, last, m, e, flags, first);
    return matcher.match();
 }
 template <class iterator, class charT, class traits>
index c7792e3d2ee02a947e47502a40c6e4a62c8d7d42..fcdb856a55eba6f2af1489850b963ec50affbd58 100644 (file)
@@ -29,7 +29,7 @@
 #include <cstddef>
 
 namespace boost{
-   namespace re_detail{
+   namespace BOOST_REGEX_DETAIL_NS{
 
 #ifdef BOOST_MSVC
 #pragma warning(push)
@@ -198,7 +198,7 @@ inline raw_storage::raw_storage(size_type n)
 #pragma warning(pop)
 #endif
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 } // namespace boost
 
 #endif
index ac8e3c81e279ba6772af66bd3cdf30bc093e8853..415c58b634dc690f856e6cce01fff2b56d888dfa 100644 (file)
@@ -48,7 +48,7 @@ OutputIterator regex_replace(OutputIterator out,
    if(i == j)
    {
       if(!(flags & regex_constants::format_no_copy))
-         out = re_detail::copy(first, last, out);
+         out = BOOST_REGEX_DETAIL_NS::copy(first, last, out);
    }
    else
    {
@@ -56,7 +56,7 @@ OutputIterator regex_replace(OutputIterator out,
       while(i != j)
       {
          if(!(flags & regex_constants::format_no_copy))
-            out = re_detail::copy(i->prefix().first, i->prefix().second, out); 
+            out = BOOST_REGEX_DETAIL_NS::copy(i->prefix().first, i->prefix().second, out); 
          out = i->format(out, fmt, flags, e);
          last_m = (*i)[0].second;
          if(flags & regex_constants::format_first_only)
@@ -64,7 +64,7 @@ OutputIterator regex_replace(OutputIterator out,
          ++i;
       }
       if(!(flags & regex_constants::format_no_copy))
-         out = re_detail::copy(last_m, last, out);
+         out = BOOST_REGEX_DETAIL_NS::copy(last_m, last, out);
    }
    return out;
 }
@@ -76,7 +76,7 @@ std::basic_string<charT> regex_replace(const std::basic_string<charT>& s,
                          match_flag_type flags = match_default)
 {
    std::basic_string<charT> result;
-   re_detail::string_out_iterator<std::basic_string<charT> > i(result);
+   BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<charT> > i(result);
    regex_replace(i, s.begin(), s.end(), e, fmt, flags);
    return result;
 }
index cf5579d2c722f12937dc07d359f5ea3aa17b2366..0725d3ec3fce0a4051e0aeaab3c9793bd3a597a7 100644 (file)
@@ -52,7 +52,7 @@ bool regex_search(BidiIterator first, BidiIterator last,
    if(e.flags() & regex_constants::failbit)
       return false;
 
-   re_detail::perl_matcher<BidiIterator, Allocator, traits> matcher(first, last, m, e, flags, base);
+   BOOST_REGEX_DETAIL_NS::perl_matcher<BidiIterator, Allocator, traits> matcher(first, last, m, e, flags, base);
    return matcher.find();
 }
 
@@ -141,7 +141,7 @@ bool regex_search(BidiIterator first, BidiIterator last,
 
    match_results<BidiIterator> m;
    typedef typename match_results<BidiIterator>::allocator_type match_alloc_type;
-   re_detail::perl_matcher<BidiIterator, match_alloc_type, traits> matcher(first, last, m, e, flags | regex_constants::match_any, first);
+   BOOST_REGEX_DETAIL_NS::perl_matcher<BidiIterator, match_alloc_type, traits> matcher(first, last, m, e, flags | regex_constants::match_any, first);
    return matcher.find();
 }
 
index c12d7baa244110aeb800f3ddab43ef432a62bda6..65b2c64abf73a0bfde8d6b3effb9a5c347880ecc 100644 (file)
@@ -39,7 +39,7 @@ namespace boost{
 #  pragma warning(disable: 4800)
 #endif
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 template <class charT>
 const basic_regex<charT>& get_default_expression(charT)
@@ -97,7 +97,7 @@ bool split_pred<OutputIterator, charT, Traits1, Alloc1>::operator()
    return true;
 }
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 
 template <class OutputIterator, class charT, class Traits1, class Alloc1, class Traits2>
 std::size_t regex_split(OutputIterator out,
@@ -110,7 +110,7 @@ std::size_t regex_split(OutputIterator out,
    //typedef typename match_results<ci_t>::allocator_type                        match_allocator;
    ci_t last = s.begin();
    std::size_t init_size = max_split;
-   re_detail::split_pred<OutputIterator, charT, Traits1, Alloc1> pred(&last, &out, &max_split);
+   BOOST_REGEX_DETAIL_NS::split_pred<OutputIterator, charT, Traits1, Alloc1> pred(&last, &out, &max_split);
    ci_t i, j;
    i = s.begin();
    j = s.end();
@@ -147,7 +147,7 @@ template <class OutputIterator, class charT, class Traits1, class Alloc1>
 inline std::size_t regex_split(OutputIterator out,
                    std::basic_string<charT, Traits1, Alloc1>& s)
 {
-   return regex_split(out, s, re_detail::get_default_expression(charT(0)), match_default, UINT_MAX);
+   return regex_split(out, s, BOOST_REGEX_DETAIL_NS::get_default_expression(charT(0)), match_default, UINT_MAX);
 }
 
 #ifdef BOOST_MSVC
index dbb0803742c1fe15bf1f2054e7830ca075012a8d..1d75604bf142d2b999b04edc9dfae4ed129828ad 100644 (file)
@@ -164,14 +164,14 @@ private:
 };
 
 template <class BidirectionalIterator, 
-          class charT = BOOST_DEDUCED_TYPENAME re_detail::regex_iterator_traits<BidirectionalIterator>::value_type,
+          class charT = BOOST_DEDUCED_TYPENAME BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::value_type,
           class traits = regex_traits<charT> >
 class regex_token_iterator 
 #ifndef BOOST_NO_STD_ITERATOR
    : public std::iterator<
          std::forward_iterator_tag, 
          sub_match<BidirectionalIterator>,
-         typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type,
+         typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type,
          const sub_match<BidirectionalIterator>*,
          const sub_match<BidirectionalIterator>& >         
 #endif
@@ -182,7 +182,7 @@ private:
 public:
    typedef          basic_regex<charT, traits>                   regex_type;
    typedef          sub_match<BidirectionalIterator>                        value_type;
-   typedef typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type 
+   typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type 
                                                                             difference_type;
    typedef          const value_type*                                       pointer;
    typedef          const value_type&                                       reference; 
index 8b1cb6ffe13b4b63f8439c0df7bb1b6ecf108052..45a4bdf626d48ba1408d578f09e424f9456f16e0 100644 (file)
@@ -82,7 +82,7 @@ struct regex_traits : public implementationT
 // interfaces that we support, in addition to the
 // required "standard" ones:
 //
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 #if !BOOST_WORKAROUND(__HP_aCC, < 60000)
 BOOST_MPL_HAS_XXX_TRAIT_DEF(boost_extensions_tag)
 #else
@@ -99,7 +99,7 @@ struct default_wrapper : public BaseT
    typedef typename BaseT::char_type char_type;
    std::string error_string(::boost::regex_constants::error_type e)const
    {
-      return ::boost::re_detail::get_default_error_string(e);
+      return ::boost::BOOST_REGEX_DETAIL_NS::get_default_error_string(e);
    }
    ::boost::regex_constants::syntax_type syntax_type(char_type c)const
    {
@@ -111,7 +111,7 @@ struct default_wrapper : public BaseT
    }
    int toi(const char_type*& p1, const char_type* p2, int radix)const
    {
-      return ::boost::re_detail::global_toi(p1, p2, radix, *this);
+      return ::boost::BOOST_REGEX_DETAIL_NS::global_toi(p1, p2, radix, *this);
    }
    char_type translate(char_type c, bool icase)const
    {
@@ -123,11 +123,11 @@ struct default_wrapper : public BaseT
    }
    char_type tolower(char_type c)const
    {
-      return ::boost::re_detail::global_lower(c);
+      return ::boost::BOOST_REGEX_DETAIL_NS::global_lower(c);
    }
    char_type toupper(char_type c)const
    {
-      return ::boost::re_detail::global_upper(c);
+      return ::boost::BOOST_REGEX_DETAIL_NS::global_upper(c);
    }
 };
 
@@ -157,13 +157,13 @@ struct compute_wrapper_base<c_regex_traits<wchar_t>, false>
 #endif
 #endif
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 
 template <class BaseT>
 struct regex_traits_wrapper 
-   : public ::boost::re_detail::compute_wrapper_base<
+   : public ::boost::BOOST_REGEX_DETAIL_NS::compute_wrapper_base<
                BaseT, 
-               ::boost::re_detail::has_boost_extensions_tag<BaseT>::value
+               ::boost::BOOST_REGEX_DETAIL_NS::has_boost_extensions_tag<BaseT>::value
             >::type
 {
    regex_traits_wrapper(){}
index a087d7844992145341d90cc697ffa6ec2a278910..1821883717beb16fbef726f77b37ffa6ad180898 100644 (file)
 #pragma warning(pop)
 #endif
 
+#include <boost/regex/config.hpp>
+
 #ifndef BOOST_REGEX_SYNTAX_TYPE_HPP
 #include <boost/regex/v4/syntax_type.hpp>
 #endif
 #ifndef BOOST_REGEX_ERROR_TYPE_HPP
 #include <boost/regex/v4/error_type.hpp>
 #endif
+#include <boost/type_traits/make_unsigned.hpp>
 
 #ifdef BOOST_NO_STDC_NAMESPACE
 namespace std{
@@ -43,7 +46,7 @@ namespace std{
 }
 #endif
 
-namespace boost{ namespace re_detail{
+namespace boost{ namespace BOOST_REGEX_DETAIL_NS{
 
 
 //
@@ -51,7 +54,10 @@ namespace boost{ namespace re_detail{
 //
 template <class charT>
 inline bool is_extended(charT c)
-{ return c > 256; }
+{
+   typedef typename make_unsigned<charT>::type unsigned_type; 
+   return (sizeof(charT) > 1) && (static_cast<unsigned_type>(c) >= 256u); 
+}
 inline bool is_extended(char)
 { return false; }
 
@@ -153,7 +159,7 @@ struct character_pointer_range
       // calling std::equal, but there is no other algorithm available:
       // not even a non-standard MS one.  So forward to unchecked_equal
       // in the MS case.
-      return ((p2 - p1) == (r.p2 - r.p1)) && re_detail::equal(p1, p2, r.p1);
+      return ((p2 - p1) == (r.p2 - r.p1)) && BOOST_REGEX_DETAIL_NS::equal(p1, p2, r.p1);
    }
 };
 template <class charT>
@@ -354,7 +360,7 @@ inline const char* get_escape_R_string<char>()
 #endif
 }
 
-} // re_detail
+} // BOOST_REGEX_DETAIL_NS
 } // boost
 
 #ifdef BOOST_MSVC
index fc57472a389fe98dc9d0a3541e29111af8335aef..821be608c1dc7583858c6e31cbb424dae2a8de60 100644 (file)
@@ -42,6 +42,7 @@
 #include <boost/scoped_array.hpp>
 #include <boost/shared_ptr.hpp>
 #include <boost/mpl/bool_fwd.hpp>
+#include <boost/regex/config.hpp>
 #ifndef BOOST_NO_STD_LOCALE
 #   include <locale>
 #endif
@@ -52,7 +53,7 @@ namespace std{
 }
 #endif
 
-namespace boost{ namespace re_detail{
+namespace boost{ namespace BOOST_REGEX_DETAIL_NS{
 #ifdef BOOST_NO_STD_DISTANCE
 template <class T>
 std::ptrdiff_t distance(const T& x, const T& y)
@@ -94,7 +95,7 @@ namespace std{
  ****************************************************************************/
 
 #ifdef __cplusplus
-namespace boost{ namespace re_detail{
+namespace boost{ namespace BOOST_REGEX_DETAIL_NS{
 
 #ifdef BOOST_MSVC
 #pragma warning (push)
@@ -123,7 +124,7 @@ inline void pointer_construct(T* p, const T& t)
  ****************************************************************************/
 
 #ifdef __cplusplus
-namespace boost{ namespace re_detail{
+namespace boost{ namespace BOOST_REGEX_DETAIL_NS{
 #if BOOST_WORKAROUND(BOOST_MSVC,>=1400) && BOOST_WORKAROUND(BOOST_MSVC, <1600) && defined(_CPPLIB_VER) && defined(BOOST_DINKUMWARE_STDLIB) && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))
    //
    // MSVC 8 will either emit warnings or else refuse to compile
index 38690b2299082998435ce4320d696eab4d18e6c4..b56d013476ad2143bbbf3a5ca2a6a879f90b8c19 100644 (file)
@@ -31,7 +31,7 @@
 #endif
 
 namespace boost{
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 /*** mask_type *******************************************************
 Whenever we have a choice of two alternatives, we use an array of bytes
@@ -120,7 +120,12 @@ enum syntax_element_type
    syntax_element_assert_backref = syntax_element_backstep + 1,
    syntax_element_toggle_case = syntax_element_assert_backref + 1,
    // a recursive expression:
-   syntax_element_recurse = syntax_element_toggle_case + 1
+   syntax_element_recurse = syntax_element_toggle_case + 1,
+   // Verbs:
+   syntax_element_fail = syntax_element_recurse + 1,
+   syntax_element_accept = syntax_element_fail + 1,
+   syntax_element_commit = syntax_element_accept + 1,
+   syntax_element_then = syntax_element_commit + 1
 };
 
 #ifdef BOOST_REGEX_DEBUG
@@ -256,6 +261,21 @@ struct re_recurse : public re_jump
    int state_id;             // identifier of first nested repeat within the recursion.
 };
 
+/*** struct re_commit *************************************************
+Used for the PRUNE, SKIP and COMMIT verbs which basically differ only in what happens
+if no match is found and we start searching forward.
+**********************************************************************/
+enum commit_type
+{
+   commit_prune,
+   commit_skip,
+   commit_commit
+};
+struct re_commit : public re_syntax_base
+{
+   commit_type action;
+};
+
 /*** enum re_jump_size_type *******************************************
 Provides compiled size of re_jump structure (allowing for trailing alignment).
 We provide this so we know how manybytes to insert when constructing the machine
@@ -281,7 +301,7 @@ iterator BOOST_REGEX_CALL re_is_set_member(iterator next,
                           const re_set_long<char_classT>* set_, 
                           const regex_data<charT, traits_type>& e, bool icase);
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 
 } // namespace boost
 
index 7ce8d5397ead10d5c3cead5f19c26f9fe2441d9f..ff8a8e467ba6158287b6d401b0037e630c3cf7ba 100644 (file)
@@ -35,11 +35,11 @@ namespace boost{
 template <class BidiIterator>
 struct sub_match : public std::pair<BidiIterator, BidiIterator>
 {
-   typedef typename re_detail::regex_iterator_traits<BidiIterator>::value_type       value_type;
+   typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidiIterator>::value_type       value_type;
 #if defined(BOOST_NO_STD_ITERATOR_TRAITS)
    typedef          std::ptrdiff_t                                                   difference_type;
 #else
-   typedef typename re_detail::regex_iterator_traits<BidiIterator>::difference_type  difference_type;
+   typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidiIterator>::difference_type  difference_type;
 #endif
    typedef          BidiIterator                                                     iterator_type;
    typedef          BidiIterator                                                     iterator;
@@ -65,7 +65,7 @@ struct sub_match : public std::pair<BidiIterator, BidiIterator>
 #endif
    difference_type BOOST_REGEX_CALL length()const
    {
-      difference_type n = matched ? ::boost::re_detail::distance((BidiIterator)this->first, (BidiIterator)this->second) : 0;
+      difference_type n = matched ? ::boost::BOOST_REGEX_DETAIL_NS::distance((BidiIterator)this->first, (BidiIterator)this->second) : 0;
       return n;
    }
    std::basic_string<value_type> str()const
@@ -73,7 +73,7 @@ struct sub_match : public std::pair<BidiIterator, BidiIterator>
       std::basic_string<value_type> result;
       if(matched)
       {
-         std::size_t len = ::boost::re_detail::distance((BidiIterator)this->first, (BidiIterator)this->second);
+         std::size_t len = ::boost::BOOST_REGEX_DETAIL_NS::distance((BidiIterator)this->first, (BidiIterator)this->second);
          result.reserve(len);
          BidiIterator i = this->first;
          while(i != this->second)
@@ -162,6 +162,11 @@ public:
 #endif
       return *this;
    }
+   //
+   // Make this type a range, for both Boost.Range, and C++11:
+   //
+   BidiIterator begin()const { return this->first; }
+   BidiIterator end()const { return this->second; }
 
 
 #ifdef BOOST_OLD_REGEX_H
@@ -190,235 +195,235 @@ typedef sub_match<std::wstring::const_iterator> wssub_match;
 
 // comparison to std::basic_string<> part 1:
 template <class RandomAccessIterator, class traits, class Allocator>
-inline bool operator == (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+inline bool operator == (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
                   const sub_match<RandomAccessIterator>& m)
 { return s.compare(m.str()) == 0; }
 template <class RandomAccessIterator, class traits, class Allocator>
-inline bool operator != (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+inline bool operator != (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
                   const sub_match<RandomAccessIterator>& m)
 { return s.compare(m.str()) != 0; }
 template <class RandomAccessIterator, class traits, class Allocator>
-inline bool operator < (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+inline bool operator < (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
                  const sub_match<RandomAccessIterator>& m)
 { return s.compare(m.str()) < 0; }
 template <class RandomAccessIterator, class traits, class Allocator>
-inline bool operator <= (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+inline bool operator <= (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
                   const sub_match<RandomAccessIterator>& m)
 { return s.compare(m.str()) <= 0; }
 template <class RandomAccessIterator, class traits, class Allocator>
-inline bool operator >= (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+inline bool operator >= (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
                   const sub_match<RandomAccessIterator>& m)
 { return s.compare(m.str()) >= 0; }
 template <class RandomAccessIterator, class traits, class Allocator>
-inline bool operator > (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+inline bool operator > (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
                  const sub_match<RandomAccessIterator>& m)
 { return s.compare(m.str()) > 0; }
 // comparison to std::basic_string<> part 2:
 template <class RandomAccessIterator, class traits, class Allocator>
 inline bool operator == (const sub_match<RandomAccessIterator>& m,
-                  const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+                  const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
 { return m.str().compare(s) == 0; }
 template <class RandomAccessIterator, class traits, class Allocator>
 inline bool operator != (const sub_match<RandomAccessIterator>& m,
-                  const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+                  const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
 { return m.str().compare(s) != 0; }
 template <class RandomAccessIterator, class traits, class Allocator>
 inline bool operator < (const sub_match<RandomAccessIterator>& m,
-                  const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+                  const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
 { return m.str().compare(s) < 0; }
 template <class RandomAccessIterator, class traits, class Allocator>
 inline bool operator > (const sub_match<RandomAccessIterator>& m,
-                  const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+                  const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
 { return m.str().compare(s) > 0; }
 template <class RandomAccessIterator, class traits, class Allocator>
 inline bool operator <= (const sub_match<RandomAccessIterator>& m,
-                  const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+                  const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
 { return m.str().compare(s) <= 0; }
 template <class RandomAccessIterator, class traits, class Allocator>
 inline bool operator >= (const sub_match<RandomAccessIterator>& m,
-                  const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+                  const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
 { return m.str().compare(s) >= 0; }
 // comparison to const charT* part 1:
 template <class RandomAccessIterator>
 inline bool operator == (const sub_match<RandomAccessIterator>& m,
-                  typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
+                  typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
 { return m.str().compare(s) == 0; }
 template <class RandomAccessIterator>
 inline bool operator != (const sub_match<RandomAccessIterator>& m,
-                  typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
+                  typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
 { return m.str().compare(s) != 0; }
 template <class RandomAccessIterator>
 inline bool operator > (const sub_match<RandomAccessIterator>& m,
-                  typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
+                  typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
 { return m.str().compare(s) > 0; }
 template <class RandomAccessIterator>
 inline bool operator < (const sub_match<RandomAccessIterator>& m,
-                  typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
+                  typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
 { return m.str().compare(s) < 0; }
 template <class RandomAccessIterator>
 inline bool operator >= (const sub_match<RandomAccessIterator>& m,
-                  typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
+                  typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
 { return m.str().compare(s) >= 0; }
 template <class RandomAccessIterator>
 inline bool operator <= (const sub_match<RandomAccessIterator>& m,
-                  typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
+                  typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
 { return m.str().compare(s) <= 0; }
 // comparison to const charT* part 2:
 template <class RandomAccessIterator>
-inline bool operator == (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+inline bool operator == (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
                   const sub_match<RandomAccessIterator>& m)
 { return m.str().compare(s) == 0; }
 template <class RandomAccessIterator>
-inline bool operator != (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+inline bool operator != (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
                   const sub_match<RandomAccessIterator>& m)
 { return m.str().compare(s) != 0; }
 template <class RandomAccessIterator>
-inline bool operator < (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+inline bool operator < (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
                   const sub_match<RandomAccessIterator>& m)
 { return m.str().compare(s) > 0; }
 template <class RandomAccessIterator>
-inline bool operator > (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+inline bool operator > (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
                   const sub_match<RandomAccessIterator>& m)
 { return m.str().compare(s) < 0; }
 template <class RandomAccessIterator>
-inline bool operator <= (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+inline bool operator <= (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
                   const sub_match<RandomAccessIterator>& m)
 { return m.str().compare(s) >= 0; }
 template <class RandomAccessIterator>
-inline bool operator >= (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+inline bool operator >= (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
                   const sub_match<RandomAccessIterator>& m)
 { return m.str().compare(s) <= 0; }
 
 // comparison to const charT& part 1:
 template <class RandomAccessIterator>
 inline bool operator == (const sub_match<RandomAccessIterator>& m,
-                  typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+                  typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
 { return m.str().compare(0, m.length(), &s, 1) == 0; }
 template <class RandomAccessIterator>
 inline bool operator != (const sub_match<RandomAccessIterator>& m,
-                  typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+                  typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
 { return m.str().compare(0, m.length(), &s, 1) != 0; }
 template <class RandomAccessIterator>
 inline bool operator > (const sub_match<RandomAccessIterator>& m,
-                  typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+                  typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
 { return m.str().compare(0, m.length(), &s, 1) > 0; }
 template <class RandomAccessIterator>
 inline bool operator < (const sub_match<RandomAccessIterator>& m,
-                  typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+                  typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
 { return m.str().compare(0, m.length(), &s, 1) < 0; }
 template <class RandomAccessIterator>
 inline bool operator >= (const sub_match<RandomAccessIterator>& m,
-                  typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+                  typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
 { return m.str().compare(0, m.length(), &s, 1) >= 0; }
 template <class RandomAccessIterator>
 inline bool operator <= (const sub_match<RandomAccessIterator>& m,
-                  typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+                  typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
 { return m.str().compare(0, m.length(), &s, 1) <= 0; }
 // comparison to const charT* part 2:
 template <class RandomAccessIterator>
-inline bool operator == (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+inline bool operator == (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
                   const sub_match<RandomAccessIterator>& m)
 { return m.str().compare(0, m.length(), &s, 1) == 0; }
 template <class RandomAccessIterator>
-inline bool operator != (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+inline bool operator != (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
                   const sub_match<RandomAccessIterator>& m)
 { return m.str().compare(0, m.length(), &s, 1) != 0; }
 template <class RandomAccessIterator>
-inline bool operator < (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+inline bool operator < (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
                   const sub_match<RandomAccessIterator>& m)
 { return m.str().compare(0, m.length(), &s, 1) > 0; }
 template <class RandomAccessIterator>
-inline bool operator > (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+inline bool operator > (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
                   const sub_match<RandomAccessIterator>& m)
 { return m.str().compare(0, m.length(), &s, 1) < 0; }
 template <class RandomAccessIterator>
-inline bool operator <= (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+inline bool operator <= (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
                   const sub_match<RandomAccessIterator>& m)
 { return m.str().compare(0, m.length(), &s, 1) >= 0; }
 template <class RandomAccessIterator>
-inline bool operator >= (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+inline bool operator >= (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
                   const sub_match<RandomAccessIterator>& m)
 { return m.str().compare(0, m.length(), &s, 1) <= 0; }
 
 // addition operators:
 template <class RandomAccessIterator, class traits, class Allocator>
-inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> 
-operator + (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> 
+operator + (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
                   const sub_match<RandomAccessIterator>& m)
 {
-   std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> result;
+   std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> result;
    result.reserve(s.size() + m.length() + 1);
    return result.append(s).append(m.first, m.second);
 }
 template <class RandomAccessIterator, class traits, class Allocator>
-inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> 
+inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> 
 operator + (const sub_match<RandomAccessIterator>& m,
-            const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+            const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
 {
-   std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> result;
+   std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> result;
    result.reserve(s.size() + m.length() + 1);
    return result.append(m.first, m.second).append(s);
 }
 #if !(defined(__GNUC__) && defined(BOOST_NO_STD_LOCALE))
 template <class RandomAccessIterator>
-inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> 
-operator + (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> 
+operator + (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
                   const sub_match<RandomAccessIterator>& m)
 {
-   std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result;
-   result.reserve(std::char_traits<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>::length(s) + m.length() + 1);
+   std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> result;
+   result.reserve(std::char_traits<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type>::length(s) + m.length() + 1);
    return result.append(s).append(m.first, m.second);
 }
 template <class RandomAccessIterator>
-inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> 
+inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> 
 operator + (const sub_match<RandomAccessIterator>& m,
-            typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const * s)
+            typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const * s)
 {
-   std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result;
-   result.reserve(std::char_traits<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>::length(s) + m.length() + 1);
+   std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> result;
+   result.reserve(std::char_traits<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type>::length(s) + m.length() + 1);
    return result.append(m.first, m.second).append(s);
 }
 #else
 // worwaround versions:
 template <class RandomAccessIterator>
-inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> 
-operator + (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> 
+operator + (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
                   const sub_match<RandomAccessIterator>& m)
 {
    return s + m.str();
 }
 template <class RandomAccessIterator>
-inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> 
+inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> 
 operator + (const sub_match<RandomAccessIterator>& m,
-            typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const * s)
+            typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const * s)
 {
    return m.str() + s;
 }
 #endif
 template <class RandomAccessIterator>
-inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> 
-operator + (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> 
+operator + (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
                   const sub_match<RandomAccessIterator>& m)
 {
-   std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result;
+   std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> result;
    result.reserve(m.length() + 2);
    return result.append(1, s).append(m.first, m.second);
 }
 template <class RandomAccessIterator>
-inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> 
+inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> 
 operator + (const sub_match<RandomAccessIterator>& m,
-            typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+            typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
 {
-   std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result;
+   std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> result;
    result.reserve(m.length() + 2);
    return result.append(m.first, m.second).append(1, s);
 }
 template <class RandomAccessIterator>
-inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> 
+inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> 
 operator + (const sub_match<RandomAccessIterator>& m1,
             const sub_match<RandomAccessIterator>& m2)
 {
-   std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result;
+   std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> result;
    result.reserve(m1.length() + m2.length() + 1);
    return result.append(m1.first, m1.second).append(m2.first, m2.second);
 }
@@ -440,7 +445,7 @@ std::ostream& operator << (std::ostream& os,
 #endif
 
 #ifdef BOOST_OLD_REGEX_H
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 template <class BidiIterator, class charT>
 int do_toi(BidiIterator i, BidiIterator j, char c, int radix)
 {
@@ -479,7 +484,7 @@ sub_match<BidiIterator>::operator int()const
       neg = -1;
       ++i;
    }
-   neg *= re_detail::do_toi(i, j, *i);
+   neg *= BOOST_REGEX_DETAIL_NS::do_toi(i, j, *i);
    if(i != j)raise_regex_exception("Bad sub-expression");
    return neg;
 }
@@ -490,7 +495,7 @@ sub_match<BidiIterator>::operator unsigned int()const
    BidiIterator j = second;
    if(i == j)
       raise_regex_exception("Bad sub-expression");
-   return re_detail::do_toi(i, j, *first);
+   return BOOST_REGEX_DETAIL_NS::do_toi(i, j, *first);
 }
 #endif
 
index 65ebd7f8ea5c0e04758259bbc5fa046281f410d8..701ef3d80ec2cacf8d8d2c81c29338c248174459 100644 (file)
@@ -76,7 +76,7 @@ class u32regex_iterator
    : public std::iterator<
          std::forward_iterator_tag, 
          match_results<BidirectionalIterator>,
-         typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type,
+         typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type,
          const match_results<BidirectionalIterator>*,
          const match_results<BidirectionalIterator>& >         
 #endif
@@ -87,7 +87,7 @@ private:
 public:
    typedef          u32regex                                                regex_type;
    typedef          match_results<BidirectionalIterator>                    value_type;
-   typedef typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type 
+   typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type 
                                                                             difference_type;
    typedef          const value_type*                                       pointer;
    typedef          const value_type&                                       reference; 
index e8649f323dfa97be8cbdd91b58c409be0d8f2ebe..9eabbe48a1abb300c4e0363e11857c882e38650f 100644 (file)
@@ -159,7 +159,7 @@ class u32regex_token_iterator
    : public std::iterator<
          std::forward_iterator_tag, 
          sub_match<BidirectionalIterator>,
-         typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type,
+         typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type,
          const sub_match<BidirectionalIterator>*,
          const sub_match<BidirectionalIterator>& >         
 #endif
@@ -170,7 +170,7 @@ private:
 public:
    typedef          u32regex                                                regex_type;
    typedef          sub_match<BidirectionalIterator>                        value_type;
-   typedef typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type 
+   typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type 
                                                                             difference_type;
    typedef          const value_type*                                       pointer;
    typedef          const value_type&                                       reference; 
index ef934b75cc2afa0655b2858a3d3831566d2cbd74..560cc217bb3ff49fbe8abd8df894af5175e69559 100644 (file)
@@ -19,6 +19,8 @@
 #ifndef BOOST_W32_REGEX_TRAITS_HPP_INCLUDED
 #define BOOST_W32_REGEX_TRAITS_HPP_INCLUDED
 
+#ifndef BOOST_REGEX_NO_WIN32_LOCALE
+
 #ifndef BOOST_RE_PAT_EXCEPT_HPP
 #include <boost/regex/pattern_except.hpp>
 #endif
@@ -60,7 +62,7 @@ namespace boost{
 template <class charT>
 class w32_regex_traits;
    
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 //
 // start by typedeffing the types we'll need:
@@ -164,19 +166,19 @@ public:
       map_iterator_type i = m_char_map.find(c);
       if(i == m_char_map.end())
       {
-         if(::boost::re_detail::w32_is_lower(c, this->m_locale)) return regex_constants::escape_type_class;
-         if(::boost::re_detail::w32_is_upper(c, this->m_locale)) return regex_constants::escape_type_not_class;
+         if(::boost::BOOST_REGEX_DETAIL_NS::w32_is_lower(c, this->m_locale)) return regex_constants::escape_type_class;
+         if(::boost::BOOST_REGEX_DETAIL_NS::w32_is_upper(c, this->m_locale)) return regex_constants::escape_type_not_class;
          return 0;
       }
       return i->second;
    }
    charT tolower(charT c)const
    {
-      return ::boost::re_detail::w32_tolower(c, this->m_locale);
+      return ::boost::BOOST_REGEX_DETAIL_NS::w32_tolower(c, this->m_locale);
    }
    bool isctype(boost::uint32_t mask, charT c)const
    {
-      return ::boost::re_detail::w32_is(this->m_locale, mask, c);
+      return ::boost::BOOST_REGEX_DETAIL_NS::w32_is(this->m_locale, mask, c);
    }
 
 private:
@@ -186,7 +188,7 @@ private:
 };
 
 template <class charT>
-w32_regex_traits_char_layer<charT>::w32_regex_traits_char_layer(::boost::re_detail::lcid_type l) 
+w32_regex_traits_char_layer<charT>::w32_regex_traits_char_layer(::boost::BOOST_REGEX_DETAIL_NS::lcid_type l) 
    : w32_regex_traits_base<charT>(l)
 {
    // we need to start by initialising our syntax map so we know which
@@ -195,12 +197,12 @@ w32_regex_traits_char_layer<charT>::w32_regex_traits_char_layer(::boost::re_deta
    std::string cat_name(w32_regex_traits<charT>::get_catalog_name());
    if(cat_name.size())
    {
-      cat = ::boost::re_detail::w32_cat_open(cat_name);
+      cat = ::boost::BOOST_REGEX_DETAIL_NS::w32_cat_open(cat_name);
       if(!cat)
       {
          std::string m("Unable to open message catalog: ");
          std::runtime_error err(m + cat_name);
-         boost::re_detail::raise_runtime_error(err);
+         boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err);
       }
    }
    //
@@ -210,7 +212,7 @@ w32_regex_traits_char_layer<charT>::w32_regex_traits_char_layer(::boost::re_deta
    {
       for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i)
       {
-         string_type mss = ::boost::re_detail::w32_cat_get(cat, this->m_locale, i, get_default_message(i));
+         string_type mss = ::boost::BOOST_REGEX_DETAIL_NS::w32_cat_get(cat, this->m_locale, i, get_default_message(i));
          for(typename string_type::size_type j = 0; j < mss.size(); ++j)
          {
             this->m_char_map[mss[j]] = i;
@@ -253,7 +255,7 @@ class BOOST_REGEX_DECL w32_regex_traits_char_layer<char> : public w32_regex_trai
 {
    typedef std::string string_type;
 public:
-   w32_regex_traits_char_layer(::boost::re_detail::lcid_type l)
+   w32_regex_traits_char_layer(::boost::BOOST_REGEX_DETAIL_NS::lcid_type l)
    : w32_regex_traits_base<char>(l)
    {
       init();
@@ -300,7 +302,7 @@ public:
 
    typedef std::basic_string<charT> string_type;
    typedef charT char_type;
-   w32_regex_traits_implementation(::boost::re_detail::lcid_type l);
+   w32_regex_traits_implementation(::boost::BOOST_REGEX_DETAIL_NS::lcid_type l);
    std::string error_string(regex_constants::error_type n) const
    {
       if(!m_error_strings.empty())
@@ -327,7 +329,7 @@ public:
    string_type transform_primary(const charT* p1, const charT* p2) const;
    string_type transform(const charT* p1, const charT* p2) const
    {
-      return ::boost::re_detail::w32_transform(this->m_locale, p1, p2);
+      return ::boost::BOOST_REGEX_DETAIL_NS::w32_transform(this->m_locale, p1, p2);
    }
 private:
    std::map<int, std::string>     m_error_strings;   // error messages indexed by numberic ID
@@ -430,19 +432,19 @@ typename w32_regex_traits_implementation<charT>::string_type
 }
 
 template <class charT>
-w32_regex_traits_implementation<charT>::w32_regex_traits_implementation(::boost::re_detail::lcid_type l)
+w32_regex_traits_implementation<charT>::w32_regex_traits_implementation(::boost::BOOST_REGEX_DETAIL_NS::lcid_type l)
 : w32_regex_traits_char_layer<charT>(l)
 {
    cat_type cat;
    std::string cat_name(w32_regex_traits<charT>::get_catalog_name());
    if(cat_name.size())
    {
-      cat = ::boost::re_detail::w32_cat_open(cat_name);
+      cat = ::boost::BOOST_REGEX_DETAIL_NS::w32_cat_open(cat_name);
       if(!cat)
       {
          std::string m("Unable to open message catalog: ");
          std::runtime_error err(m + cat_name);
-         boost::re_detail::raise_runtime_error(err);
+         boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err);
       }
    }
    //
@@ -464,7 +466,7 @@ w32_regex_traits_implementation<charT>::w32_regex_traits_implementation(::boost:
             default_message.append(1, static_cast<charT>(*p));
             ++p;
          }
-         string_type s = ::boost::re_detail::w32_cat_get(cat, this->m_locale, i+200, default_message);
+         string_type s = ::boost::BOOST_REGEX_DETAIL_NS::w32_cat_get(cat, this->m_locale, i+200, default_message);
          std::string result;
          for(std::string::size_type j = 0; j < s.size(); ++j)
          {
@@ -495,7 +497,7 @@ w32_regex_traits_implementation<charT>::w32_regex_traits_implementation(::boost:
       static const string_type null_string;
       for(unsigned int j = 0; j <= 13; ++j)
       {
-         string_type s(::boost::re_detail::w32_cat_get(cat, this->m_locale, j+300, null_string));
+         string_type s(::boost::BOOST_REGEX_DETAIL_NS::w32_cat_get(cat, this->m_locale, j+300, null_string));
          if(s.size())
             this->m_custom_class_names[s] = masks[j];
       }
@@ -503,7 +505,7 @@ w32_regex_traits_implementation<charT>::w32_regex_traits_implementation(::boost:
    //
    // get the collation format used by m_pcollate:
    //
-   m_collate_type = re_detail::find_sort_syntax(this, &m_collate_delim);
+   m_collate_type = BOOST_REGEX_DETAIL_NS::find_sort_syntax(this, &m_collate_delim);
 }
 
 template <class charT>
@@ -542,7 +544,7 @@ typename w32_regex_traits_implementation<charT>::char_class_type
       if(pos != m_custom_class_names.end())
          return pos->second;
    }
-   std::size_t state_id = 1 + re_detail::get_default_class_id(p1, p2);
+   std::size_t state_id = 1 + BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2);
    if(state_id < sizeof(masks) / sizeof(masks[0]))
       return masks[state_id];
    return masks[0];
@@ -550,13 +552,13 @@ typename w32_regex_traits_implementation<charT>::char_class_type
 
 
 template <class charT>
-boost::shared_ptr<const w32_regex_traits_implementation<charT> > create_w32_regex_traits(::boost::re_detail::lcid_type l)
+boost::shared_ptr<const w32_regex_traits_implementation<charT> > create_w32_regex_traits(::boost::BOOST_REGEX_DETAIL_NS::lcid_type l)
 {
    // TODO: create a cache for previously constructed objects.
-   return boost::object_cache< ::boost::re_detail::lcid_type, w32_regex_traits_implementation<charT> >::get(l, 5);
+   return boost::object_cache< ::boost::BOOST_REGEX_DETAIL_NS::lcid_type, w32_regex_traits_implementation<charT> >::get(l, 5);
 }
 
-} // re_detail
+} // BOOST_REGEX_DETAIL_NS
 
 template <class charT>
 class w32_regex_traits
@@ -565,13 +567,13 @@ public:
    typedef charT                         char_type;
    typedef std::size_t                   size_type;
    typedef std::basic_string<char_type>  string_type;
-   typedef ::boost::re_detail::lcid_type locale_type;
+   typedef ::boost::BOOST_REGEX_DETAIL_NS::lcid_type locale_type;
    typedef boost::uint_least32_t         char_class_type;
 
    struct boost_extensions_tag{};
 
    w32_regex_traits()
-      : m_pimpl(re_detail::create_w32_regex_traits<charT>(::boost::re_detail::w32_get_default_locale()))
+      : m_pimpl(BOOST_REGEX_DETAIL_NS::create_w32_regex_traits<charT>(::boost::BOOST_REGEX_DETAIL_NS::w32_get_default_locale()))
    { }
    static size_type length(const char_type* p)
    {
@@ -603,11 +605,11 @@ public:
    }
    charT toupper(charT c) const
    {
-      return ::boost::re_detail::w32_toupper(c, this->m_pimpl->m_locale);
+      return ::boost::BOOST_REGEX_DETAIL_NS::w32_toupper(c, this->m_pimpl->m_locale);
    }
    string_type transform(const charT* p1, const charT* p2) const
    {
-      return ::boost::re_detail::w32_transform(this->m_pimpl->m_locale, p1, p2);
+      return ::boost::BOOST_REGEX_DETAIL_NS::w32_transform(this->m_pimpl->m_locale, p1, p2);
    }
    string_type transform_primary(const charT* p1, const charT* p2) const
    {
@@ -623,34 +625,34 @@ public:
    }
    bool isctype(charT c, char_class_type f) const
    {
-      if((f & re_detail::w32_regex_traits_implementation<charT>::mask_base) 
-         && (this->m_pimpl->isctype(f & re_detail::w32_regex_traits_implementation<charT>::mask_base, c)))
+      if((f & BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_base) 
+         && (this->m_pimpl->isctype(f & BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_base, c)))
          return true;
-      else if((f & re_detail::w32_regex_traits_implementation<charT>::mask_unicode) && re_detail::is_extended(c))
+      else if((f & BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_unicode) && BOOST_REGEX_DETAIL_NS::is_extended(c))
          return true;
-      else if((f & re_detail::w32_regex_traits_implementation<charT>::mask_word) && (c == '_'))
+      else if((f & BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_word) && (c == '_'))
          return true;
-      else if((f & re_detail::w32_regex_traits_implementation<charT>::mask_vertical)
-         && (::boost::re_detail::is_separator(c) || (c == '\v')))
+      else if((f & BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_vertical)
+         && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == '\v')))
          return true;
-      else if((f & re_detail::w32_regex_traits_implementation<charT>::mask_horizontal) 
-         && this->isctype(c, 0x0008u) && !this->isctype(c, re_detail::w32_regex_traits_implementation<charT>::mask_vertical))
+      else if((f & BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_horizontal) 
+         && this->isctype(c, 0x0008u) && !this->isctype(c, BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_vertical))
          return true;
       return false;
    }
    int toi(const charT*& p1, const charT* p2, int radix)const
    {
-      return ::boost::re_detail::global_toi(p1, p2, radix, *this);
+      return ::boost::BOOST_REGEX_DETAIL_NS::global_toi(p1, p2, radix, *this);
    }
    int value(charT c, int radix)const
    {
-      int result = ::boost::re_detail::global_value(c);
+      int result = ::boost::BOOST_REGEX_DETAIL_NS::global_value(c);
       return result < radix ? result : -1;
    }
    locale_type imbue(locale_type l)
    {
-      ::boost::re_detail::lcid_type result(getloc());
-      m_pimpl = re_detail::create_w32_regex_traits<charT>(l);
+      ::boost::BOOST_REGEX_DETAIL_NS::lcid_type result(getloc());
+      m_pimpl = BOOST_REGEX_DETAIL_NS::create_w32_regex_traits<charT>(l);
       return result;
    }
    locale_type getloc()const
@@ -670,7 +672,7 @@ public:
    static std::string get_catalog_name();
 
 private:
-   boost::shared_ptr<const re_detail::w32_regex_traits_implementation<charT> > m_pimpl;
+   boost::shared_ptr<const BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT> > m_pimpl;
    //
    // catalog name handler:
    //
@@ -736,4 +738,6 @@ static_mutex& w32_regex_traits<charT>::get_mutex_inst()
 #pragma warning(pop)
 #endif
 
+#endif // BOOST_REGEX_NO_WIN32_LOCALE
+
 #endif
index 8ae1527e7ccaec77e3a8b218b02448ec319da37a..c0289b870bb6c5ba7c17ef232cfe9659deff9493 100644 (file)
@@ -6,7 +6,8 @@
 //  See accompanying file LICENSE_1_0.txt or copy at
 //  http://www.boost.org/LICENSE_1_0.txt
 
-#if !defined( BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS ) && !defined( BOOST_NO_CXX11_NULLPTR )
+#if !defined( BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS ) && !defined( BOOST_NO_CXX11_NULLPTR )\
+    && !(defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x5130))
 
     explicit operator bool () const BOOST_NOEXCEPT
     {
index cd07ed65fcad2c673c0692950909e90b0fc852fc..7996aa43254c6648cdf9486df6664d6c027b5c1c 100644 (file)
@@ -28,6 +28,7 @@
 #include <boost/smart_ptr/bad_weak_ptr.hpp>
 #include <boost/smart_ptr/detail/sp_counted_base.hpp>
 #include <boost/smart_ptr/detail/sp_counted_impl.hpp>
+#include <boost/smart_ptr/detail/sp_disable_deprecated.hpp>
 #include <boost/detail/workaround.hpp>
 // In order to avoid circular dependencies with Boost.TR1
 // we make sure that our include of <memory> doesn't try to
 
 #include <boost/core/addressof.hpp>
 
+#if defined( BOOST_SP_DISABLE_DEPRECATED )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
 namespace boost
 {
 
@@ -692,6 +698,10 @@ inline shared_count::shared_count( weak_count const & r, sp_nothrow_tag ): pi_(
 
 } // namespace boost
 
+#if defined( BOOST_SP_DISABLE_DEPRECATED )
+#pragma GCC diagnostic pop
+#endif
+
 #ifdef __BORLANDC__
 # pragma warn .8027     // Functions containing try are not expanded inline
 #endif
diff --git a/3rdparty/boost/boost/smart_ptr/detail/sp_disable_deprecated.hpp b/3rdparty/boost/boost/smart_ptr/detail/sp_disable_deprecated.hpp
new file mode 100644 (file)
index 0000000..f79bdf3
--- /dev/null
@@ -0,0 +1,40 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_DISABLE_DEPRECATED_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_DISABLE_DEPRECATED_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/smart_ptr/detail/sp_disable_deprecated.hpp
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/config.hpp>
+
+#if defined( __GNUC__ ) && ( defined( __GXX_EXPERIMENTAL_CXX0X__ ) || ( __cplusplus >= 201103L ) )
+
+# if defined( BOOST_GCC )
+
+#  if BOOST_GCC >= 40600
+#   define BOOST_SP_DISABLE_DEPRECATED
+#  endif
+
+# elif defined( __clang__ ) && defined( __has_warning )
+
+#  if __has_warning( "-Wdeprecated-declarations" )
+#   define BOOST_SP_DISABLE_DEPRECATED
+#  endif
+
+# endif
+
+#endif
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_DISABLE_DEPRECATED_HPP_INCLUDED
index 814b0c2e93ee30dd9bd53a6b559cd04e5d303137..79cae14a370043987d74b7671fb939f76a3aac87 100644 (file)
@@ -111,6 +111,17 @@ extern "C" long __cdecl _InterlockedCompareExchange( long volatile *, long, long
 extern "C" long __cdecl _InterlockedExchange( long volatile *, long );
 extern "C" long __cdecl _InterlockedExchangeAdd( long volatile *, long );
 
+# if defined( BOOST_MSVC ) && BOOST_MSVC == 1310
+//From MSDN, Visual Studio .NET 2003 spedific: To declare one of the interlocked functions
+//for use as an intrinsic, the function must be declared with the leading underscore and
+//the new function must appear in a #pragma intrinsic statement.
+#  pragma intrinsic( _InterlockedIncrement )
+#  pragma intrinsic( _InterlockedDecrement )
+#  pragma intrinsic( _InterlockedCompareExchange )
+#  pragma intrinsic( _InterlockedExchange )
+#  pragma intrinsic( _InterlockedExchangeAdd )
+# endif
+
 #endif
 
 # define BOOST_SP_INTERLOCKED_INCREMENT _InterlockedIncrement
index 2dabc9f4435d4efbd0c3ccc41d0e13bb410cd9a0..44d183647892e0e63732d66dd2132bd3b4e0ea16 100644 (file)
@@ -60,7 +60,16 @@ namespace detail
 {
 
 #if !defined( BOOST_USE_WINDOWS_H ) && !BOOST_PLAT_WINDOWS_RUNTIME
+#if !BOOST_COMP_CLANG || !defined __MINGW32__
   extern "C" void __stdcall Sleep( unsigned long ms );
+#else
+#include <_mingw.h>
+#if !defined __MINGW64_VERSION_MAJOR
+  extern "C" void __stdcall Sleep( unsigned long ms );
+#else
+  extern "C" __declspec(dllimport) void __stdcall Sleep( unsigned long ms );
+#endif
+#endif
 #endif
 
 inline void yield( unsigned k )
index be6722d5f52e5f1a6f84498bc5461b58b1883e5b..d5d8720f521a478f505bb885ff7077404c5ac491 100644 (file)
 #include <boost/assert.hpp>
 #include <boost/checked_delete.hpp>
 #include <boost/smart_ptr/detail/sp_nullptr_t.hpp>
+#include <boost/smart_ptr/detail/sp_disable_deprecated.hpp>
 #include <boost/detail/workaround.hpp>
 
 #ifndef BOOST_NO_AUTO_PTR
 # include <memory>          // for std::auto_ptr
 #endif
 
+#if defined( BOOST_SP_DISABLE_DEPRECATED )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
 namespace boost
 {
 
@@ -154,4 +160,8 @@ template<class T> inline T * get_pointer(scoped_ptr<T> const & p) BOOST_NOEXCEPT
 
 } // namespace boost
 
+#if defined( BOOST_SP_DISABLE_DEPRECATED )
+#pragma GCC diagnostic pop
+#endif
+
 #endif // #ifndef BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED
index 991ca3dad3d8174694a4fe3ab1d9664e83bed0bd..47bc33d5177f471519f53d0e916ed2cdebd2d525 100644 (file)
@@ -29,6 +29,7 @@
 #include <boost/detail/workaround.hpp>
 #include <boost/smart_ptr/detail/sp_convertible.hpp>
 #include <boost/smart_ptr/detail/sp_nullptr_t.hpp>
+#include <boost/smart_ptr/detail/sp_disable_deprecated.hpp>
 
 #if !defined(BOOST_SP_NO_ATOMIC_ACCESS)
 #include <boost/smart_ptr/detail/spinlock_pool.hpp>
 #endif
 #endif
 
+#if defined( BOOST_SP_DISABLE_DEPRECATED )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
 namespace boost
 {
 
@@ -1064,4 +1070,8 @@ template< class T > std::size_t hash_value( boost::shared_ptr<T> const & p ) BOO
 
 } // namespace boost
 
+#if defined( BOOST_SP_DISABLE_DEPRECATED )
+#pragma GCC diagnostic pop
+#endif
+
 #endif  // #ifndef BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED
index d083a9c37d8042fe0cf6e28f4c6e73926de6e85c..07d461d492b6034582283e1d6e69298934d3cea4 100644 (file)
@@ -30,7 +30,7 @@
 #  ifndef BOOST_NO_CXX11_VARIADIC_MACROS
 #     define BOOST_STATIC_ASSERT_MSG( ... ) static_assert(__VA_ARGS__)
 #  else
-#     define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )
+#     define BOOST_STATIC_ASSERT_MSG( B, Msg ) static_assert( B, Msg )
 #  endif
 #else
 #     define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )
 #     define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)
 #  endif
 #endif
-//
-// If the compiler warns about unused typedefs then enable this:
-//
-#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
-#  define BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused))
-#else
-#  define BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE
-#endif
 
 #ifndef BOOST_NO_CXX11_STATIC_ASSERT
 #  ifndef BOOST_NO_CXX11_VARIADIC_MACROS
@@ -117,14 +109,7 @@ template<int x> struct static_assert_test{};
 //
 #if !defined(BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS)
 
-#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
-// __LINE__ macro broken when -ZI is used see Q199057
-// fortunately MSVC ignores duplicate typedef's.
-#define BOOST_STATIC_ASSERT( B ) \
-   typedef ::boost::static_assert_test<\
-      sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)\
-      > boost_static_assert_typedef_
-#elif defined(BOOST_MSVC) && defined(BOOST_NO_CXX11_VARIADIC_MACROS)
+#if defined(BOOST_MSVC) && defined(BOOST_NO_CXX11_VARIADIC_MACROS)
 #define BOOST_STATIC_ASSERT( B ) \
    typedef ::boost::static_assert_test<\
       sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST ( B ) >)>\
@@ -167,12 +152,12 @@ template<int x> struct static_assert_test{};
 #     define BOOST_STATIC_ASSERT( ... ) \
          typedef ::boost::static_assert_test<\
             sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >)>\
-               BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE
+               BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED
 #  else
 #     define BOOST_STATIC_ASSERT( B ) \
          typedef ::boost::static_assert_test<\
             sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\
-               BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE
+               BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED
 #  endif
 #endif
 
index 398c6875f20ac1eebeb3e58b92cc82e6435aea1d..57680f89f6907f3e8f7dcc35c58c472da2179087 100644 (file)
 #include "boost/type_traits/alignment_of.hpp"
 #include "boost/type_traits/common_type.hpp"
 #include "boost/type_traits/conditional.hpp"
+#include "boost/type_traits/copy_cv.hpp"
 #include "boost/type_traits/decay.hpp"
+#include "boost/type_traits/declval.hpp"
 #include "boost/type_traits/extent.hpp"
 #include "boost/type_traits/floating_point_promotion.hpp"
 #include "boost/type_traits/function_traits.hpp"
+
+#include "boost/type_traits/has_bit_and.hpp"
+#include "boost/type_traits/has_bit_and_assign.hpp"
+#include "boost/type_traits/has_bit_or.hpp"
+#include "boost/type_traits/has_bit_or_assign.hpp"
+#include "boost/type_traits/has_bit_xor.hpp"
+#include "boost/type_traits/has_bit_xor_assign.hpp"
+#include "boost/type_traits/has_complement.hpp"
+#include "boost/type_traits/has_dereference.hpp"
+#include "boost/type_traits/has_divides.hpp"
+#include "boost/type_traits/has_divides_assign.hpp"
+#include "boost/type_traits/has_equal_to.hpp"
+#include "boost/type_traits/has_greater.hpp"
+#include "boost/type_traits/has_greater_equal.hpp"
+#include "boost/type_traits/has_left_shift.hpp"
+#include "boost/type_traits/has_left_shift_assign.hpp"
+#include "boost/type_traits/has_less.hpp"
+#include "boost/type_traits/has_less_equal.hpp"
+#include "boost/type_traits/has_logical_and.hpp"
+#include "boost/type_traits/has_logical_not.hpp"
+#include "boost/type_traits/has_logical_or.hpp"
+#include "boost/type_traits/has_minus.hpp"
+#include "boost/type_traits/has_minus_assign.hpp"
+#include "boost/type_traits/has_modulus.hpp"
+#include "boost/type_traits/has_modulus_assign.hpp"
+#include "boost/type_traits/has_multiplies.hpp"
+#include "boost/type_traits/has_multiplies_assign.hpp"
+#include "boost/type_traits/has_negate.hpp"
 #if !defined(__BORLANDC__) && !defined(__CUDACC__)
 #include "boost/type_traits/has_new_operator.hpp"
 #endif
+#include "boost/type_traits/has_not_equal_to.hpp"
 #include "boost/type_traits/has_nothrow_assign.hpp"
 #include "boost/type_traits/has_nothrow_constructor.hpp"
 #include "boost/type_traits/has_nothrow_copy.hpp"
 #include "boost/type_traits/has_nothrow_destructor.hpp"
-#include <boost/type_traits/has_operator.hpp>
+#include "boost/type_traits/has_plus.hpp"
+#include "boost/type_traits/has_plus_assign.hpp"
+#include "boost/type_traits/has_post_decrement.hpp"
+#include "boost/type_traits/has_post_increment.hpp"
+#include "boost/type_traits/has_pre_decrement.hpp"
+#include "boost/type_traits/has_pre_increment.hpp"
+#include "boost/type_traits/has_right_shift.hpp"
+#include "boost/type_traits/has_right_shift_assign.hpp"
 #include "boost/type_traits/has_trivial_assign.hpp"
 #include "boost/type_traits/has_trivial_constructor.hpp"
 #include "boost/type_traits/has_trivial_copy.hpp"
 #include "boost/type_traits/has_trivial_destructor.hpp"
 #include "boost/type_traits/has_trivial_move_assign.hpp"
 #include "boost/type_traits/has_trivial_move_constructor.hpp"
+#include "boost/type_traits/has_unary_minus.hpp"
+#include "boost/type_traits/has_unary_plus.hpp"
 #include "boost/type_traits/has_virtual_destructor.hpp"
+
+#include "boost/type_traits/integral_constant.hpp"
+
 #include "boost/type_traits/is_abstract.hpp"
 #include "boost/type_traits/is_arithmetic.hpp"
 #include "boost/type_traits/is_array.hpp"
+#include "boost/type_traits/is_assignable.hpp"
 #include "boost/type_traits/is_base_and_derived.hpp"
 #include "boost/type_traits/is_base_of.hpp"
 #include "boost/type_traits/is_class.hpp"
-#include <boost/type_traits/is_complex.hpp>
+#include "boost/type_traits/is_complex.hpp"
 #include "boost/type_traits/is_compound.hpp"
 #include "boost/type_traits/is_const.hpp"
+#include "boost/type_traits/is_constructible.hpp"
 #include "boost/type_traits/is_convertible.hpp"
-#include "boost/type_traits/is_copy_constructible.hpp"
 #include "boost/type_traits/is_copy_assignable.hpp"
+#include "boost/type_traits/is_copy_constructible.hpp"
+#include "boost/type_traits/is_default_constructible.hpp"
+#include "boost/type_traits/is_destructible.hpp"
 #include "boost/type_traits/is_empty.hpp"
 #include "boost/type_traits/is_enum.hpp"
+#include "boost/type_traits/is_final.hpp"
 #include "boost/type_traits/is_float.hpp"
 #include "boost/type_traits/is_floating_point.hpp"
 #include "boost/type_traits/is_function.hpp"
 #include "boost/type_traits/is_nothrow_move_constructible.hpp"
 #include "boost/type_traits/is_object.hpp"
 #include "boost/type_traits/is_pod.hpp"
-#include "boost/type_traits/is_polymorphic.hpp"
 #include "boost/type_traits/is_pointer.hpp"
+#include "boost/type_traits/is_polymorphic.hpp"
 #include "boost/type_traits/is_reference.hpp"
 #include "boost/type_traits/is_rvalue_reference.hpp"
-#include "boost/type_traits/is_signed.hpp"
 #include "boost/type_traits/is_same.hpp"
 #include "boost/type_traits/is_scalar.hpp"
+#include "boost/type_traits/is_signed.hpp"
 #include "boost/type_traits/is_stateless.hpp"
 #include "boost/type_traits/is_union.hpp"
 #include "boost/type_traits/is_unsigned.hpp"
-#include "boost/type_traits/is_void.hpp"
 #include "boost/type_traits/is_virtual_base_of.hpp"
+#include "boost/type_traits/is_void.hpp"
 #include "boost/type_traits/is_volatile.hpp"
-#include <boost/type_traits/make_unsigned.hpp>
-#include <boost/type_traits/make_signed.hpp>
+#include "boost/type_traits/make_signed.hpp"
+#include "boost/type_traits/make_unsigned.hpp"
 #include "boost/type_traits/rank.hpp"
-#include "boost/type_traits/remove_bounds.hpp"
-#include "boost/type_traits/remove_extent.hpp"
 #include "boost/type_traits/remove_all_extents.hpp"
+#include "boost/type_traits/remove_bounds.hpp"
 #include "boost/type_traits/remove_const.hpp"
 #include "boost/type_traits/remove_cv.hpp"
+#include "boost/type_traits/remove_extent.hpp"
 #include "boost/type_traits/remove_pointer.hpp"
 #include "boost/type_traits/remove_reference.hpp"
 #include "boost/type_traits/remove_volatile.hpp"
+#include "boost/type_traits/type_identity.hpp"
 #include "boost/type_traits/type_with_alignment.hpp"
+
 #if !(defined(__sgi) && defined(__EDG_VERSION__) && (__EDG_VERSION__ == 238))
 #include "boost/type_traits/integral_promotion.hpp"
 #include "boost/type_traits/promote.hpp"
 #endif
 
-#include "boost/type_traits/ice.hpp"
-
 #endif // BOOST_TYPE_TRAITS_HPP
index 0a27f8a971d3859c9d362d9d1ebbffa65b43791b..a9fb781c789a10a69a8af73609c53c3335316d75 100644 (file)
 #ifndef BOOST_TT_ADD_CONST_HPP_INCLUDED
 #define BOOST_TT_ADD_CONST_HPP_INCLUDED
 
-#include <boost/config.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
+#include <boost/type_traits/detail/config.hpp>
 
 namespace boost {
 
@@ -30,16 +27,20 @@ namespace boost {
 #   pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored
 #endif 
 
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_const,T,T const)
+   template <class T> struct add_const
+   {
+      typedef T const type;
+   };
 
 #if defined(BOOST_MSVC)
 #   pragma warning(pop)
 #endif 
 
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_const,T&,T&)
+   template <class T> struct add_const<T&>
+   {
+      typedef T& type;
+   };
 
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_ADD_CONST_HPP_INCLUDED
index 66625c66c2c3812e63dd547ca9e85191be19bb8e..e62ddee0c456ef164ba4b3f78ce2a9e35ba1aaf9 100644 (file)
@@ -13,9 +13,6 @@
 
 #include <boost/config.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
 // * convert a type T to a const volatile type - add_cv<T>
@@ -31,16 +28,14 @@ namespace boost {
 #   pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored
 #endif 
 
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_cv,T,T const volatile)
+template <class T> struct add_cv{ typedef T const volatile type; };
 
 #if defined(BOOST_MSVC)
 #   pragma warning(pop)
 #endif 
 
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_cv,T&,T&)
+template <class T> struct add_cv<T&>{ typedef T& type; };
 
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_ADD_CV_HPP_INCLUDED
index 1d7579476a62ce78c7b27ce249de88e51b5d9d3c..41851a1f349e2425f09b96783238fea01bd7f81e 100644 (file)
@@ -8,19 +8,20 @@
 
 #include <boost/type_traits/add_reference.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost{
 
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_lvalue_reference,T,typename boost::add_reference<T>::type)
+template <class T> struct add_lvalue_reference
+{
+   typedef typename boost::add_reference<T>::type type; 
+};
 
 #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_lvalue_reference,T&&,T&)
+template <class T> struct add_lvalue_reference<T&&>
+{
+   typedef T& type;
+};
 #endif
 
 }
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif  // BOOST_TYPE_TRAITS_EXT_ADD_LVALUE_REFERENCE__HPP
index 3e0e48189474057258c781b80f52c40e511ae821..745f63a084ff30ad2a8d402e747adcd1a33e64cc 100644 (file)
 
 #include <boost/type_traits/remove_reference.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
-namespace detail {
-
 #if defined(__BORLANDC__) && (__BORLANDC__ < 0x5A0)
 //
 // For some reason this implementation stops Borlands compiler
@@ -25,27 +20,27 @@ namespace detail {
 // to arrays for some reason though (shrug...) (JM 20021104)
 //
 template <typename T>
-struct add_pointer_impl
+struct add_pointer
 {
     typedef T* type;
 };
 template <typename T>
-struct add_pointer_impl<T&>
+struct add_pointer<T&>
 {
     typedef T* type;
 };
 template <typename T>
-struct add_pointer_impl<T&const>
+struct add_pointer<T&const>
 {
     typedef T* type;
 };
 template <typename T>
-struct add_pointer_impl<T&volatile>
+struct add_pointer<T&volatile>
 {
     typedef T* type;
 };
 template <typename T>
-struct add_pointer_impl<T&const volatile>
+struct add_pointer<T&const volatile>
 {
     typedef T* type;
 };
@@ -53,7 +48,7 @@ struct add_pointer_impl<T&const volatile>
 #else
 
 template <typename T>
-struct add_pointer_impl
+struct add_pointer
 {
     typedef typename remove_reference<T>::type no_ref_type;
     typedef no_ref_type* type;
@@ -61,12 +56,6 @@ struct add_pointer_impl
 
 #endif
 
-} // namespace detail
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_pointer,T,typename boost::detail::add_pointer_impl<T>::type)
-
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_ADD_POINTER_HPP_INCLUDED
index 5e3efca6920b34f6dca5aaeb29b87689677f379e..526f259c879d574db8dea93b7ab58dfc132c6164 100644 (file)
@@ -9,13 +9,9 @@
 #ifndef BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
 #define BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
 
-#include <boost/type_traits/is_reference.hpp>
 #include <boost/detail/workaround.hpp>
 #include <boost/config.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
 namespace detail {
@@ -26,47 +22,38 @@ namespace detail {
 //
 
 template <typename T>
-struct add_reference_rvalue_layer
+struct add_reference_impl
 {
     typedef T& type;
 };
 
 #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
 template <typename T>
-struct add_reference_rvalue_layer<T&&>
+struct add_reference_impl<T&&>
 {
     typedef T&& type;
 };
 #endif
 
-template <typename T>
-struct add_reference_impl
+} // namespace detail
+
+template <class T> struct add_reference
 {
-    typedef typename add_reference_rvalue_layer<T>::type type;
+   typedef typename boost::detail::add_reference_impl<T>::type type;
+};
+template <class T> struct add_reference<T&>
+{
+   typedef T& type;
 };
-
-BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1(typename T,add_reference,T&,T&)
 
 // these full specialisations are always required:
-BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void,void)
+template <> struct add_reference<void> { typedef void type; };
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void const,void const)
-BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void volatile,void volatile)
-BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void const volatile,void const volatile)
-#endif
-
-} // namespace detail
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_reference,T,typename boost::detail::add_reference_impl<T>::type)
-
-// agurt, 07/mar/03: workaround Borland's ill-formed sensitivity to an additional
-// level of indirection, here
-#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_reference,T&,T&)
+template <> struct add_reference<const void> { typedef void type; };
+template <> struct add_reference<const volatile void> { typedef void type; };
+template <> struct add_reference<volatile void> { typedef void type; };
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
index 242716f09c0fd759417f76595ad76dcfdca9995b..44ead348031819a17de319d70dce0bbc0d0952cc 100644 (file)
@@ -15,9 +15,6 @@
 #include <boost/type_traits/is_void.hpp>
 #include <boost/type_traits/is_reference.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 //----------------------------------------------------------------------------//
 //                                                                            //
 //                           C++03 implementation of                          //
@@ -56,11 +53,12 @@ namespace type_traits_detail {
 
 }
 
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_rvalue_reference,T,typename boost::type_traits_detail::add_rvalue_reference_imp<T>::type)
+template <class T> struct add_rvalue_reference
+{
+   typedef typename boost::type_traits_detail::add_rvalue_reference_imp<T>::type type;
+};
 
 }  // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif  // BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP
 
index 86b529798e3f2e36c2bd13bde194762a707e4aff..24f515c802fbdecb05c76c13c2acc025d1e0ad33 100644 (file)
@@ -12,9 +12,6 @@
 
 #include <boost/config.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
 // * convert a type T to volatile type - add_volatile<T>
@@ -30,16 +27,14 @@ namespace boost {
 #   pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored
 #endif 
 
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_volatile,T,T volatile)
+template <class T> struct add_volatile{ typedef T volatile type; };
 
 #if defined(BOOST_MSVC)
 #   pragma warning(pop)
 #endif 
 
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_volatile,T&,T&)
+template <class T> struct add_volatile<T&>{ typedef T& type; };
 
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_ADD_VOLATILE_HPP_INCLUDED
old mode 100755 (executable)
new mode 100644 (file)
index 5420f26..09f0c6b
+//-----------------------------------------------------------------------------
+// boost aligned_storage.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman, Itay Maman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TT_ALIGNED_STORAGE_HPP
+#define BOOST_TT_ALIGNED_STORAGE_HPP
+
+#include <cstddef> // for std::size_t
+
+#include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
+#include "boost/type_traits/alignment_of.hpp"
+#include "boost/type_traits/type_with_alignment.hpp"
+#include "boost/type_traits/is_pod.hpp"
+#include "boost/type_traits/conditional.hpp"
+
+namespace boost {
+
+namespace detail { namespace aligned_storage {
+
+BOOST_STATIC_CONSTANT(
+      std::size_t
+    , alignment_of_max_align = ::boost::alignment_of<boost::detail::max_align>::value
+    );
+
+//
+// To be TR1 conforming this must be a POD type:
+//
+template <
+      std::size_t size_
+    , std::size_t alignment_
+>
+struct aligned_storage_imp
+{
+    union data_t
+    {
+        char buf[size_];
+
+        typename ::boost::type_with_alignment<alignment_>::type align_;
+    } data_;
+    void* address() const { return const_cast<aligned_storage_imp*>(this); }
+};
+template <std::size_t size>
+struct aligned_storage_imp<size, std::size_t(-1)>
+{
+   union data_t
+   {
+      char buf[size];
+      ::boost::detail::max_align align_;
+   } data_;
+   void* address() const { return const_cast<aligned_storage_imp*>(this); }
+};
+
+template< std::size_t alignment_ >
+struct aligned_storage_imp<0u,alignment_>
+{
+    /* intentionally empty */
+    void* address() const { return 0; }
+};
 
-//  Copyright (C) John Maddock 2005.
-//  Use, modification and distribution are subject to the Boost Software License,
-//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-//  http://www.boost.org/LICENSE_1_0.txt).
+}} // namespace detail::aligned_storage
+
+template <
+      std::size_t size_
+    , std::size_t alignment_ = std::size_t(-1)
+>
+class aligned_storage : 
+#ifndef __BORLANDC__
+   private 
+#else
+   public
+#endif
+   ::boost::detail::aligned_storage::aligned_storage_imp<size_, alignment_> 
+{
+public: // constants
+
+    typedef ::boost::detail::aligned_storage::aligned_storage_imp<size_, alignment_> type;
+
+    BOOST_STATIC_CONSTANT(
+          std::size_t
+        , size = size_
+        );
+    BOOST_STATIC_CONSTANT(
+          std::size_t
+        , alignment = (
+              alignment_ == std::size_t(-1)
+            ? ::boost::detail::aligned_storage::alignment_of_max_align
+            : alignment_
+            )
+        );
+
+private: // noncopyable
+
+    aligned_storage(const aligned_storage&);
+    aligned_storage& operator=(const aligned_storage&);
+
+public: // structors
+
+    aligned_storage()
+    {
+    }
+
+    ~aligned_storage()
+    {
+    }
+
+public: // accessors
+
+    void* address()
+    {
+        return static_cast<type*>(this)->address();
+    }
+
+    const void* address() const
+    {
+        return static_cast<const type*>(this)->address();
+    }
+};
+
+//
+// Make sure that is_pod recognises aligned_storage<>::type
+// as a POD (Note that aligned_storage<> itself is not a POD):
 //
-//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+template <std::size_t size_, std::size_t alignment_>
+struct is_pod< ::boost::detail::aligned_storage::aligned_storage_imp<size_, alignment_> > : public true_type{};
 
-#ifndef BOOST_TT_ALIGNED_STORAGE_HPP_INCLUDED
-#  define BOOST_TT_ALIGNED_STORAGE_HPP_INCLUDED
-#  include <boost/aligned_storage.hpp>
-#endif // BOOST_TT_ALIGNED_STORAGE_HPP_INCLUDED
+} // namespace boost
 
+#endif // BOOST_ALIGNED_STORAGE_HPP
index 31a5f3839f33c389a107adfb2910a9a3e9df77f6..7d960e318400df1f87e8b9c32a74ea6dd5c1db04 100644 (file)
@@ -13,8 +13,7 @@
 #include <cstddef>
 
 #include <boost/type_traits/intrinsics.hpp>
-// should be the last #include
-#include <boost/type_traits/detail/size_t_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 #ifdef BOOST_MSVC
 #   pragma warning(push)
@@ -86,29 +85,25 @@ struct alignment_of_impl
 
 } // namespace detail
 
-BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(alignment_of,T,::boost::detail::alignment_of_impl<T>::value)
+template <class T> struct alignment_of : public integral_constant<std::size_t, ::boost::detail::alignment_of_impl<T>::value>{};
 
 // references have to be treated specially, assume
 // that a reference is just a special pointer:
-template <typename T>
-struct alignment_of<T&>
-    : public alignment_of<T*>
-{
-};
+template <typename T> struct alignment_of<T&> : public alignment_of<T*>{};
+
 #ifdef __BORLANDC__
 // long double gives an incorrect value of 10 (!)
 // unless we do this...
 struct long_double_wrapper{ long double ld; };
-template<> struct alignment_of<long double>
-   : public alignment_of<long_double_wrapper>{};
+template<> struct alignment_of<long double> : public alignment_of<long_double_wrapper>{};
 #endif
 
 // void has to be treated specially:
-BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void,0)
+template<> struct alignment_of<void> : integral_constant<std::size_t, 0>{};
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void const,0)
-BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void volatile,0)
-BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void const volatile,0)
+template<> struct alignment_of<void const> : integral_constant<std::size_t, 0>{};
+template<> struct alignment_of<void const volatile> : integral_constant<std::size_t, 0>{};
+template<> struct alignment_of<void volatile> : integral_constant<std::size_t, 0>{};
 #endif
 
 } // namespace boost
@@ -120,7 +115,5 @@ BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void const volatile,0)
 #   pragma warning(pop)
 #endif
 
-#include <boost/type_traits/detail/size_t_trait_undef.hpp>
-
 #endif // BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED
 
index b52ff167ebc7c4ae3a8e110e3a91252d17703a70..5c4303b9ec549a56bada472d7da4302d3da44116 100644 (file)
-//  common_type.hpp  ---------------------------------------------------------//
-
-//  Copyright 2008 Howard Hinnant
-//  Copyright 2008 Beman Dawes
+#ifndef BOOST_TYPE_TRAITS_COMMON_TYPE_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_COMMON_TYPE_HPP_INCLUDED
 
+//
+//  Copyright 2015 Peter Dimov
+//
 //  Distributed under the Boost Software License, Version 1.0.
-//  See http://www.boost.org/LICENSE_1_0.txt
-
-#ifndef BOOST_TYPE_TRAITS_COMMON_TYPE_HPP
-#define BOOST_TYPE_TRAITS_COMMON_TYPE_HPP
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
 
 #include <boost/config.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/declval.hpp>
 
-#if defined(__SUNPRO_CC) && !defined(BOOST_COMMON_TYPE_DONT_USE_TYPEOF)
-#  define BOOST_COMMON_TYPE_DONT_USE_TYPEOF
-#endif
-#if defined(__IBMCPP__) && !defined(BOOST_COMMON_TYPE_DONT_USE_TYPEOF)
-#  define BOOST_COMMON_TYPE_DONT_USE_TYPEOF
+#if defined(BOOST_NO_CXX11_DECLTYPE)
+#include <boost/type_traits/detail/common_type_impl.hpp>
 #endif
 
-//----------------------------------------------------------------------------//
-#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_COMMON_TYPE_ARITY)
-#define BOOST_COMMON_TYPE_ARITY 3
+#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+#include <boost/type_traits/detail/mp_defer.hpp>
 #endif
 
-//----------------------------------------------------------------------------//
-#if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_COMMON_TYPE_DONT_USE_TYPEOF)
-#include <boost/typeof/typeof.hpp>   // boost wonders never cease!
-#endif
+namespace boost
+{
 
-//----------------------------------------------------------------------------//
-#ifndef BOOST_NO_CXX11_STATIC_ASSERT
-#define BOOST_COMMON_TYPE_STATIC_ASSERT(CND, MSG, TYPES) static_assert(CND,MSG)
-#elif defined(BOOST_COMMON_TYPE_USES_MPL_ASSERT)
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/bool.hpp>
-#define BOOST_COMMON_TYPE_STATIC_ASSERT(CND, MSG, TYPES)                                 \
-    BOOST_MPL_ASSERT_MSG(boost::mpl::bool_< (CND) >::type::value, MSG, TYPES)
-#else
-#include <boost/static_assert.hpp>
-#define BOOST_COMMON_TYPE_STATIC_ASSERT(CND, MSG, TYPES) BOOST_STATIC_ASSERT(CND)
-#endif
+// variadic common_type
 
-#if !defined(BOOST_NO_CXX11_STATIC_ASSERT) || !defined(BOOST_COMMON_TYPE_USES_MPL_ASSERT)
-#define BOOST_COMMON_TYPE_MUST_BE_A_COMPLE_TYPE "must be complete type"
-#endif
-
-#if defined(BOOST_NO_CXX11_DECLTYPE) && defined(BOOST_COMMON_TYPE_DONT_USE_TYPEOF)
-#include <boost/type_traits/detail/common_type_imp.hpp>
-#include <boost/type_traits/remove_cv.hpp>
-#endif
-#include <boost/mpl/if.hpp>
-#include <boost/utility/declval.hpp>
-#include <boost/type_traits/add_rvalue_reference.hpp>
-
-//----------------------------------------------------------------------------//
-//                                                                            //
-//                           C++03 implementation of                          //
-//             20.9.7.6 Other transformations [meta.trans.other]              //
-//                          Written by Howard Hinnant                         //
-//      Adapted for Boost by Beman Dawes, Vicente Botet and  Jeffrey Hellrung //
-//                                                                            //
-//----------------------------------------------------------------------------//
-
-namespace boost {
-
-// prototype
 #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
-    template<typename... T>
-    struct common_type;
-#else // or no specialization
-    template <class T, class U = void, class V = void>
-    struct common_type
-    {
-    public:
-        typedef typename common_type<typename common_type<T, U>::type, V>::type type;
-    };
-#endif
 
+template<class... T> struct common_type
+{
+};
+
+#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
+
+template<class... T> using common_type_t = typename common_type<T...>::type;
+
+namespace type_traits_detail
+{
+
+template<class T1, class T2, class... T> using common_type_fold = common_type_t<common_type_t<T1, T2>, T...>;
+
+} // namespace type_traits_detail
+
+template<class T1, class T2, class... T>
+struct common_type<T1, T2, T...>: type_traits_detail::mp_defer<type_traits_detail::common_type_fold, T1, T2, T...>
+{
+};
 
-// 1 arg
-    template<typename T>
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
-    struct common_type<T>
 #else
-    struct common_type<T, void, void>
 
-#endif
-    {
-        BOOST_COMMON_TYPE_STATIC_ASSERT(sizeof(T) > 0, BOOST_COMMON_TYPE_MUST_BE_A_COMPLE_TYPE, (T));
-    public:
-        typedef T type;
-    };
-
-// 2 args
-namespace type_traits_detail {
-
-    template <class T, class U>
-    struct common_type_2
-    {
-    private:
-        BOOST_COMMON_TYPE_STATIC_ASSERT(sizeof(T) > 0, BOOST_COMMON_TYPE_MUST_BE_A_COMPLE_TYPE, (T));
-        BOOST_COMMON_TYPE_STATIC_ASSERT(sizeof(U) > 0, BOOST_COMMON_TYPE_MUST_BE_A_COMPLE_TYPE, (U));
-        static bool declval_bool();  // workaround gcc bug; not required by std
-        static typename add_rvalue_reference<T>::type declval_T();  // workaround gcc bug; not required by std
-        static typename add_rvalue_reference<U>::type declval_U();  // workaround gcc bug; not required by std
-        static typename add_rvalue_reference<bool>::type declval_b();  
+template<class T1, class T2, class... T>
+struct common_type<T1, T2, T...>: common_type<typename common_type<T1, T2>::type, T...>
+{
+};
+
+#endif // !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
+
+#else
+
+template<
+    class T1 = void, class T2 = void, class T3 = void,
+    class T4 = void, class T5 = void, class T6 = void,
+    class T7 = void, class T8 = void, class T9 = void
+>
+struct common_type: common_type<typename common_type<T1, T2>::type, T3, T4, T5, T6, T7, T8, T9>
+{
+};
+
+#endif // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+// one argument
+
+template<class T> struct common_type<T>: boost::decay<T>
+{
+};
+
+// two arguments
+
+namespace type_traits_detail
+{
+
+// binary common_type
 
 #if !defined(BOOST_NO_CXX11_DECLTYPE)
-    public:
-        typedef decltype(declval<bool>() ? declval<T>() : declval<U>()) type;
-#elif defined(BOOST_COMMON_TYPE_DONT_USE_TYPEOF)
-    public:
-    typedef typename detail_type_traits_common_type::common_type_impl<
-          typename remove_cv<T>::type,
-          typename remove_cv<U>::type
-      >::type type;
+
+#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+    
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1800
+
+// internal compiler error on msvc-12.0
+
+template<class T1, class T2> using builtin_common_type = typename boost::decay<decltype( boost::declval<bool>()? boost::declval<T1>(): boost::declval<T2>() )>::type;
+
+template<class T1, class T2> struct common_type_impl: mp_defer<builtin_common_type, T1, T2>
+{
+};
+
 #else
-    public:
-        typedef BOOST_TYPEOF_TPL(declval_b() ? declval_T() : declval_U()) type;
-#endif
 
-#if defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ == 3
-    public:
-        void public_dummy_function_just_to_silence_warning();
-#endif
-    };
+template<class T1, class T2> using builtin_common_type = decltype( boost::declval<bool>()? boost::declval<T1>(): boost::declval<T2>() );
 
-    template <class T>
-    struct common_type_2<T, T>
-    {
-        typedef T type;
-    };
-    }
+template<class T1, class T2> struct common_type_impl_2: mp_defer<builtin_common_type, T1, T2>
+{
+};
+
+template<class T1, class T2> using decay_common_type = typename boost::decay<typename common_type_impl_2<T1, T2>::type>::type;
+
+template<class T1, class T2> struct common_type_impl: mp_defer<decay_common_type, T1, T2>
+{
+};
+
+#endif // !defined(BOOST_MSVC) || BOOST_MSVC > 1800
 
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
-    template <class T, class U>
-    struct common_type<T, U>
 #else
-    template <class T, class U>
-    struct common_type<T, U, void>
-#endif
-    : public type_traits_detail::common_type_2<T,U>
-    { };
 
+template<class T1, class T2> struct common_type_impl: boost::decay<decltype( boost::declval<bool>()? boost::declval<T1>(): boost::declval<T2>() )>
+{
+};
 
-// 3 or more args
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
-    template<typename T, typename U, typename... V>
-    struct common_type<T, U, V...> {
-    public:
-        typedef typename common_type<typename common_type<T, U>::type, V...>::type type;
-    };
-#endif
-}  // namespace boost
+#endif // #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+#endif // #if !defined(BOOST_NO_CXX11_DECLTYPE)
+
+// decay helper
+
+template<class T1, class T2, class T1d = typename boost::decay<T1>::type, class T2d = typename boost::decay<T2>::type> struct common_type_decay_helper: boost::common_type<T1d, T2d>
+{
+};
+
+template<class T1, class T2> struct common_type_decay_helper<T1, T2, T1, T2>: common_type_impl<T1, T2>
+{
+};
+
+} // type_traits_detail
+
+template<class T1, class T2> struct common_type<T1, T2>: type_traits_detail::common_type_decay_helper<T1, T2>
+{
+};
+
+} // namespace boost
 
-#endif  // BOOST_TYPE_TRAITS_COMMON_TYPE_HPP
+#endif // #ifndef BOOST_TYPE_TRAITS_COMMON_TYPE_HPP_INCLUDED
index 8bbda85fc6b3c15b3f6006ae2af0c5fd0e990f3b..b7e82dbe8243e6c280d31f04d8aef87017902c9c 100644 (file)
@@ -1,4 +1,3 @@
-
 //  (C) Copyright John Maddock 2010.  
 //  Use, modification and distribution are subject to the Boost Software License,
 //  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 #ifndef BOOST_TT_CONDITIONAL_HPP_INCLUDED
 #define BOOST_TT_CONDITIONAL_HPP_INCLUDED
 
-#include <boost/mpl/if.hpp>
-
 namespace boost {
 
-template <bool b, class T, class U>
-struct conditional : public mpl::if_c<b, T, U>
-{
-};
+template <bool b, class T, class U> struct conditional { typedef T type; };
+template <class T, class U> struct conditional<false, T, U> { typedef U type; };
 
 } // namespace boost
 
diff --git a/3rdparty/boost/boost/type_traits/config.hpp b/3rdparty/boost/boost/type_traits/config.hpp
deleted file mode 100644 (file)
index 2e25ad0..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-
-//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
-//  Use, modification and distribution are subject to the Boost Software License,
-//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-//  http://www.boost.org/LICENSE_1_0.txt).
-//
-//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
-
-#ifndef BOOST_TT_CONFIG_HPP_INCLUDED
-#define BOOST_TT_CONFIG_HPP_INCLUDED
-
-#ifndef BOOST_CONFIG_HPP
-#include <boost/config.hpp>
-#endif
-
-#include <boost/detail/workaround.hpp>
-
-//
-// whenever we have a conversion function with ellipses
-// it needs to be declared __cdecl to suppress compiler
-// warnings from MS and Borland compilers (this *must*
-// appear before we include is_same.hpp below):
-#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32))
-#   define BOOST_TT_DECL __cdecl
-#else
-#   define BOOST_TT_DECL /**/
-#endif
-
-# if (BOOST_WORKAROUND(__MWERKS__, < 0x3000)                         \
-    || BOOST_WORKAROUND(__IBMCPP__, < 600 )                         \
-    || BOOST_WORKAROUND(__BORLANDC__, < 0x5A0)                      \
-    || defined(__ghs)                                               \
-    || BOOST_WORKAROUND(__HP_aCC, < 60700)           \
-    || BOOST_WORKAROUND(MPW_CPLUS, BOOST_TESTED_AT(0x890))          \
-    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580)))       \
-    && defined(BOOST_NO_IS_ABSTRACT)
-
-#   define BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION 1
-
-#endif
-
-#ifndef BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION
-# define BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION 1
-#endif
-
-//
-// define BOOST_TT_TEST_MS_FUNC_SIGS
-// when we want to test __stdcall etc function types with is_function etc
-// (Note, does not work with Borland, even though it does support __stdcall etc):
-//
-#if defined(_MSC_EXTENSIONS) && !defined(__BORLANDC__)
-#  define BOOST_TT_TEST_MS_FUNC_SIGS
-#endif
-
-//
-// define BOOST_TT_NO_CV_FUNC_TEST
-// if tests for cv-qualified member functions don't 
-// work in is_member_function_pointer
-//
-#if BOOST_WORKAROUND(__MWERKS__, < 0x3000) || BOOST_WORKAROUND(__IBMCPP__, <= 600)
-#  define BOOST_TT_NO_CV_FUNC_TEST
-#endif
-
-//
-// Macros that have been deprecated, defined here for backwards compatibility:
-//
-#define BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(x)
-#define BOOST_TT_BROKEN_COMPILER_SPEC(x)
-
-#endif // BOOST_TT_CONFIG_HPP_INCLUDED
-
-
diff --git a/3rdparty/boost/boost/type_traits/copy_cv.hpp b/3rdparty/boost/boost/type_traits/copy_cv.hpp
new file mode 100644 (file)
index 0000000..1605ca3
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef BOOST_TYPE_TRAITS_COPY_CV_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_COPY_CV_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_volatile.hpp>
+#include <boost/type_traits/conditional.hpp>
+
+namespace boost
+{
+
+template<class T, class U> struct copy_cv
+{
+private:
+
+    typedef typename boost::conditional<boost::is_const<U>::value, typename boost::add_const<T>::type, T>::type CT;
+
+public:
+
+    typedef typename boost::conditional<boost::is_volatile<U>::value, typename boost::add_volatile<CT>::type, CT>::type type;
+};
+
+} // namespace boost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_COPY_CV_HPP_INCLUDED
old mode 100755 (executable)
new mode 100644 (file)
index c23a9b0..4e81184
@@ -9,33 +9,32 @@
 #ifndef BOOST_TT_DECAY_HPP_INCLUDED
 #define BOOST_TT_DECAY_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
 #include <boost/type_traits/is_array.hpp>
 #include <boost/type_traits/is_function.hpp>
 #include <boost/type_traits/remove_bounds.hpp>
 #include <boost/type_traits/add_pointer.hpp>
 #include <boost/type_traits/remove_reference.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/remove_cv.hpp>
 
 namespace boost 
 {
 
+   namespace detail
+   {
+
+      template <class T, bool Array, bool Function> struct decay_imp { typedef typename remove_cv<T>::type type; };
+      template <class T> struct decay_imp<T, true, false> { typedef typename remove_bounds<T>::type* type; };
+      template <class T> struct decay_imp<T, false, true> { typedef T* type; };
+
+   }
+
     template< class T >
     struct decay
     {
     private:
-        typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type Ty;
+        typedef typename remove_reference<T>::type Ty;
     public:
-        typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< 
-            is_array<Ty>,
-            mpl::identity<BOOST_DEDUCED_TYPENAME remove_bounds<Ty>::type*>,
-            BOOST_DEDUCED_TYPENAME mpl::eval_if< 
-                is_function<Ty>,
-                add_pointer<Ty>,
-                mpl::identity<Ty>
-            >
-        >::type type;
+       typedef typename boost::detail::decay_imp<Ty, boost::is_array<Ty>::value, boost::is_function<Ty>::value>::type type;
     };
     
 } // namespace boost
diff --git a/3rdparty/boost/boost/type_traits/declval.hpp b/3rdparty/boost/boost/type_traits/declval.hpp
new file mode 100644 (file)
index 0000000..a050012
--- /dev/null
@@ -0,0 +1,44 @@
+//  declval.hpp  -------------------------------------------------------------//
+
+//  Copyright 2010 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_TYPE_TRAITS_DECLVAL_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DECLVAL_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+//----------------------------------------------------------------------------//
+
+#include <boost/type_traits/add_rvalue_reference.hpp>
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                           C++03 implementation of                          //
+//                   20.2.4 Function template declval [declval]               //
+//                          Written by Vicente J. Botet Escriba               //
+//                                                                            //
+// 1 The library provides the function template declval to simplify the
+// definition of expressions which occur as unevaluated operands.
+// 2 Remarks: If this function is used, the program is ill-formed.
+// 3 Remarks: The template parameter T of declval may be an incomplete type.
+// [ Example:
+//
+// template <class To, class From>
+// decltype(static_cast<To>(declval<From>())) convert(From&&);
+//
+// declares a function template convert which only participates in overloading
+// if the type From can be explicitly converted to type To. For another example
+// see class template common_type (20.9.7.6). -end example ]
+//----------------------------------------------------------------------------//
+
+namespace boost {
+
+    template <typename T>
+    typename add_rvalue_reference<T>::type declval() BOOST_NOEXCEPT; // as unevaluated operand
+
+}  // namespace boost
+
+#endif  // BOOST_TYPE_TRAITS_DECLVAL_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/detail/bool_trait_def.hpp b/3rdparty/boost/boost/type_traits/detail/bool_trait_def.hpp
deleted file mode 100644 (file)
index 69e4f1c..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-
-// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// Distributed under the Boost Software License, Version 1.0. 
-// (See accompanying file LICENSE_1_0.txt or copy at 
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// $Source$
-// $Date$
-// $Revision$
-
-#include <boost/type_traits/detail/template_arity_spec.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-#include <boost/config.hpp>
-
-//
-// Unfortunately some libraries have started using this header without
-// cleaning up afterwards: so we'd better undef the macros just in case 
-// they've been defined already....
-//
-#ifdef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
-#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
-#undef BOOST_TT_AUX_BOOL_C_BASE
-#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1
-#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2
-#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1
-#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2
-#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1
-#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2
-#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1
-#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2
-#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1
-#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2
-#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1
-#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1
-#endif
-
-#if defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x570)
-#   define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
-    typedef ::boost::integral_constant<bool,C> type; \
-    enum { value = type::value }; \
-    /**/
-#   define BOOST_TT_AUX_BOOL_C_BASE(C)
-#endif
-
-#ifndef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
-#   define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) /**/
-#endif
-
-#ifndef BOOST_TT_AUX_BOOL_C_BASE
-#   define BOOST_TT_AUX_BOOL_C_BASE(C) : public ::boost::integral_constant<bool,C>
-#endif 
-
-
-#define BOOST_TT_AUX_BOOL_TRAIT_DEF1(trait,T,C) \
-template< typename T > struct trait \
-    BOOST_TT_AUX_BOOL_C_BASE(C) \
-{ \
-public:\
-    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
-    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \
-}; \
-\
-BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \
-/**/
-
-
-#define BOOST_TT_AUX_BOOL_TRAIT_DEF2(trait,T1,T2,C) \
-template< typename T1, typename T2 > struct trait \
-    BOOST_TT_AUX_BOOL_C_BASE(C) \
-{ \
-public:\
-    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
-    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,trait,(T1,T2)) \
-}; \
-\
-BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,trait) \
-/**/
-
-#define BOOST_TT_AUX_BOOL_TRAIT_DEF3(trait,T1,T2,T3,C) \
-template< typename T1, typename T2, typename T3 > struct trait \
-    BOOST_TT_AUX_BOOL_C_BASE(C) \
-{ \
-public:\
-    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
-    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,trait,(T1,T2,T3)) \
-}; \
-\
-BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(3,trait) \
-/**/
-
-#define BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,C) \
-template<> struct trait< sp > \
-    BOOST_TT_AUX_BOOL_C_BASE(C) \
-{ \
-public:\
-    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
-    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(sp)) \
-}; \
-/**/
-
-#define BOOST_TT_AUX_BOOL_TRAIT_SPEC2(trait,sp1,sp2,C) \
-template<> struct trait< sp1,sp2 > \
-    BOOST_TT_AUX_BOOL_C_BASE(C) \
-{ \
-public:\
-    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
-    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,trait,(sp1,sp2)) \
-}; \
-/**/
-
-#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(trait,sp,C) \
-template<> struct trait##_impl< sp > \
-{ \
-public:\
-    BOOST_STATIC_CONSTANT(bool, value = (C)); \
-}; \
-/**/
-
-#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,sp1,sp2,C) \
-template<> struct trait##_impl< sp1,sp2 > \
-{ \
-public:\
-    BOOST_STATIC_CONSTANT(bool, value = (C)); \
-}; \
-/**/
-
-#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(param,trait,sp,C) \
-template< param > struct trait< sp > \
-    BOOST_TT_AUX_BOOL_C_BASE(C) \
-{ \
-public:\
-    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
-}; \
-/**/
-
-#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(param1,param2,trait,sp,C) \
-template< param1, param2 > struct trait< sp > \
-    BOOST_TT_AUX_BOOL_C_BASE(C) \
-{ \
-public:\
-    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
-}; \
-/**/
-
-#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \
-template< param > struct trait< sp1,sp2 > \
-    BOOST_TT_AUX_BOOL_C_BASE(C) \
-{ \
-public:\
-    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
-    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,trait,(sp1,sp2)) \
-}; \
-/**/
-
-#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(param1,param2,trait,sp1,sp2,C) \
-template< param1, param2 > struct trait< sp1,sp2 > \
-    BOOST_TT_AUX_BOOL_C_BASE(C) \
-{ \
-public:\
-    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
-}; \
-/**/
-
-#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \
-template< param > struct trait##_impl< sp1,sp2 > \
-{ \
-public:\
-    BOOST_STATIC_CONSTANT(bool, value = (C)); \
-}; \
-/**/
-
-#ifndef BOOST_NO_CV_SPECIALIZATIONS
-#   define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \
-    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \
-    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const,value) \
-    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp volatile,value) \
-    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const volatile,value) \
-    /**/
-#else
-#   define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \
-    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \
-    /**/
-#endif
diff --git a/3rdparty/boost/boost/type_traits/detail/bool_trait_undef.hpp b/3rdparty/boost/boost/type_traits/detail/bool_trait_undef.hpp
deleted file mode 100644 (file)
index 4ac61ef..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-
-// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// Distributed under the Boost Software License, Version 1.0. 
-// (See accompanying file LICENSE_1_0.txt or copy at 
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// $Source$
-// $Date$
-// $Revision$
-
-#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
-#undef BOOST_TT_AUX_BOOL_C_BASE
-#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1
-#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2
-#undef BOOST_TT_AUX_BOOL_TRAIT_DEF3
-#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1
-#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2
-#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1
-#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2
-#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1
-#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2
-#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1
-#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2
-#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1
-#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1
diff --git a/3rdparty/boost/boost/type_traits/detail/common_arithmetic_type.hpp b/3rdparty/boost/boost/type_traits/detail/common_arithmetic_type.hpp
new file mode 100644 (file)
index 0000000..7211002
--- /dev/null
@@ -0,0 +1,212 @@
+#ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_ARITHMETIC_TYPE_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DETAIL_COMMON_ARITHMETIC_TYPE_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/config.hpp>
+
+namespace boost
+{
+
+namespace type_traits_detail
+{
+
+template<int I> struct arithmetic_type;
+
+// Types bool, char, char16_t, char32_t, wchar_t,
+// and the signed and unsigned integer types are
+// collectively called integral types
+
+template<> struct arithmetic_type<1>
+{
+    typedef bool type;
+    typedef char (&result_type) [1];
+};
+
+template<> struct arithmetic_type<2>
+{
+    typedef char type;
+    typedef char (&result_type) [2];
+};
+
+template<> struct arithmetic_type<3>
+{
+    typedef wchar_t type;
+    typedef char (&result_type) [3];
+};
+
+// There are five standard signed integer types:
+// “signed char”, “short int”, “int”, “long int”, and “long long int”.
+
+template<> struct arithmetic_type<4>
+{
+    typedef signed char type;
+    typedef char (&result_type) [4];
+};
+
+template<> struct arithmetic_type<5>
+{
+    typedef short type;
+    typedef char (&result_type) [5];
+};
+
+template<> struct arithmetic_type<6>
+{
+    typedef int type;
+    typedef char (&result_type) [6];
+};
+
+template<> struct arithmetic_type<7>
+{
+    typedef long type;
+    typedef char (&result_type) [7];
+};
+
+template<> struct arithmetic_type<8>
+{
+    typedef boost::long_long_type type;
+    typedef char (&result_type) [8];
+};
+
+// For each of the standard signed integer types, there exists a corresponding
+// (but different) standard unsigned integer type: “unsigned char”, “unsigned short int”,
+// “unsigned int”, “unsigned long int”, and “unsigned long long int”
+
+template<> struct arithmetic_type<9>
+{
+    typedef unsigned char type;
+    typedef char (&result_type) [9];
+};
+
+template<> struct arithmetic_type<10>
+{
+    typedef unsigned short type;
+    typedef char (&result_type) [10];
+};
+
+template<> struct arithmetic_type<11>
+{
+    typedef unsigned int type;
+    typedef char (&result_type) [11];
+};
+
+template<> struct arithmetic_type<12>
+{
+    typedef unsigned long type;
+    typedef char (&result_type) [12];
+};
+
+template<> struct arithmetic_type<13>
+{
+    typedef boost::ulong_long_type type;
+    typedef char (&result_type) [13];
+};
+
+// There are three floating point types: float, double, and long double.
+
+template<> struct arithmetic_type<14>
+{
+    typedef float type;
+    typedef char (&result_type) [14];
+};
+
+template<> struct arithmetic_type<15>
+{
+    typedef double type;
+    typedef char (&result_type) [15];
+};
+
+template<> struct arithmetic_type<16>
+{
+    typedef long double type;
+    typedef char (&result_type) [16];
+};
+
+#if !defined( BOOST_NO_CXX11_CHAR16_T )
+
+template<> struct arithmetic_type<17>
+{
+    typedef char16_t type;
+    typedef char (&result_type) [17];
+};
+
+#endif
+
+#if !defined( BOOST_NO_CXX11_CHAR32_T )
+
+template<> struct arithmetic_type<18>
+{
+    typedef char32_t type;
+    typedef char (&result_type) [18];
+};
+
+#endif
+
+#if defined( BOOST_HAS_INT128 )
+
+template<> struct arithmetic_type<19>
+{
+    typedef boost::int128_type type;
+    typedef char (&result_type) [19];
+};
+
+template<> struct arithmetic_type<20>
+{
+    typedef boost::uint128_type type;
+    typedef char (&result_type) [20];
+};
+
+#endif
+
+template<class T, class U> class common_arithmetic_type
+{
+private:
+
+    static arithmetic_type<1>::result_type select( arithmetic_type<1>::type );
+    static arithmetic_type<2>::result_type select( arithmetic_type<2>::type );
+    static arithmetic_type<3>::result_type select( arithmetic_type<3>::type );
+    static arithmetic_type<4>::result_type select( arithmetic_type<4>::type );
+    static arithmetic_type<5>::result_type select( arithmetic_type<5>::type );
+    static arithmetic_type<6>::result_type select( arithmetic_type<6>::type );
+    static arithmetic_type<7>::result_type select( arithmetic_type<7>::type );
+    static arithmetic_type<8>::result_type select( arithmetic_type<8>::type );
+    static arithmetic_type<9>::result_type select( arithmetic_type<9>::type );
+    static arithmetic_type<10>::result_type select( arithmetic_type<10>::type );
+    static arithmetic_type<11>::result_type select( arithmetic_type<11>::type );
+    static arithmetic_type<12>::result_type select( arithmetic_type<12>::type );
+    static arithmetic_type<13>::result_type select( arithmetic_type<13>::type );
+    static arithmetic_type<14>::result_type select( arithmetic_type<14>::type );
+    static arithmetic_type<15>::result_type select( arithmetic_type<15>::type );
+    static arithmetic_type<16>::result_type select( arithmetic_type<16>::type );
+
+#if !defined( BOOST_NO_CXX11_CHAR16_T )
+    static arithmetic_type<17>::result_type select( arithmetic_type<17>::type );
+#endif
+
+#if !defined( BOOST_NO_CXX11_CHAR32_T )
+    static arithmetic_type<18>::result_type select( arithmetic_type<18>::type );
+#endif
+
+#if defined( BOOST_HAS_INT128 )
+    static arithmetic_type<19>::result_type select( arithmetic_type<19>::type );
+    static arithmetic_type<20>::result_type select( arithmetic_type<20>::type );
+#endif
+
+    static bool cond();
+
+public:
+
+    typedef typename arithmetic_type< sizeof(select( cond()? T(): U() )) >::type type;
+};
+
+} // namespace type_traits_detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_ARITHMETIC_TYPE_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/detail/common_type_imp.hpp b/3rdparty/boost/boost/type_traits/detail/common_type_imp.hpp
deleted file mode 100644 (file)
index 84de8b4..0000000
+++ /dev/null
@@ -1,333 +0,0 @@
-/*******************************************************************************
- * boost/type_traits/detail/common_type_imp.hpp
- *
- * Copyright 2010, Jeffrey Hellrung.
- * Distributed under the Boost Software License, Version 1.0.  (See accompanying
- * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- *
- * struct boost::common_type<T,U>
- *
- * common_type<T,U>::type is the type of the expression
- *     b() ? x() : y()
- * where b() returns a bool, x() has return type T, and y() has return type U.
- * See
- *     http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2661.htm#common_type
- *
- * Note that this evaluates to void if one or both of T and U is void.
- ******************************************************************************/
-
-#ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMP_HPP
-#define BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMP_HPP
-
-#include <cstddef>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/begin_end.hpp>
-#include <boost/mpl/contains.hpp>
-#include <boost/mpl/copy.hpp>
-#include <boost/mpl/deref.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/inserter.hpp>
-#include <boost/mpl/next.hpp>
-#include <boost/mpl/or.hpp>
-#include <boost/mpl/placeholders.hpp>
-#include <boost/mpl/push_back.hpp>
-#include <boost/mpl/size.hpp>
-#include <boost/mpl/vector/vector0.hpp>
-#include <boost/mpl/vector/vector10.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-#include <boost/type_traits/is_enum.hpp>
-#include <boost/type_traits/is_integral.hpp>
-#include <boost/type_traits/make_signed.hpp>
-#include <boost/type_traits/make_unsigned.hpp>
-#include <boost/type_traits/remove_cv.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-#include <boost/utility/declval.hpp>
-
-namespace boost
-{
-
-namespace detail_type_traits_common_type
-{
-
-/*******************************************************************************
- * struct propagate_cv< From, To >
- *
- * This metafunction propagates cv-qualifiers on type From to type To.
- ******************************************************************************/
-
-template< class From, class To >
-struct propagate_cv
-{ typedef To type; };
-template< class From, class To >
-struct propagate_cv< const From, To >
-{ typedef To const type; };
-template< class From, class To >
-struct propagate_cv< volatile From, To >
-{ typedef To volatile type; };
-template< class From, class To >
-struct propagate_cv< const volatile From, To >
-{ typedef To const volatile type; };
-
-/*******************************************************************************
- * struct is_integral_or_enum<T>
- *
- * This metafunction determines if T is an integral type which can be made
- * signed or unsigned.
- ******************************************************************************/
-
-template< class T >
-struct is_integral_or_enum
-    : public mpl::or_< is_integral<T>, is_enum<T> >
-{ };
-template<>
-struct is_integral_or_enum< bool >
-    : public false_type
-{ };
-
-/*******************************************************************************
- * struct make_unsigned_soft<T>
- * struct make_signed_soft<T>
- *
- * These metafunction are identical to make_unsigned and make_signed,
- * respectively, except for special-casing bool.
- ******************************************************************************/
-
-template< class T >
-struct make_unsigned_soft
-    : public make_unsigned<T>
-{ };
-template<>
-struct make_unsigned_soft< bool >
-{ typedef bool type; };
-
-template< class T >
-struct make_signed_soft
-    : public make_signed<T>
-{ };
-template<>
-struct make_signed_soft< bool >
-{ typedef bool type; };
-
-/*******************************************************************************
- * struct sizeof_t<N>
- * typedef ... yes_type
- * typedef ... no_type
- *
- * These types are integral players in the use of the "sizeof trick", i.e., we
- * can distinguish overload selection by inspecting the size of the return type
- * of the overload.
- ******************************************************************************/
-
-template< std::size_t N > struct sizeof_t { char _dummy[N]; };
-typedef sizeof_t<1> yes_type;
-typedef sizeof_t<2> no_type;
-BOOST_MPL_ASSERT_RELATION( sizeof( yes_type ), ==, 1 );
-BOOST_MPL_ASSERT_RELATION( sizeof( no_type ), ==, 2 );
-
-/*******************************************************************************
- * rvalue_test(T&) -> no_type
- * rvalue_test(...) -> yes_type
- *
- * These overloads are used to determine the rvalue-ness of an expression.
- ******************************************************************************/
-
-template< class T > no_type rvalue_test(T&);
-yes_type rvalue_test(...);
-
-/*******************************************************************************
- * struct conversion_test_overloads< Sequence >
- *
- * This struct has multiple overloads of the static member function apply, each
- * one taking a single parameter of a type within the Boost.MPL sequence
- * Sequence.  Each such apply overload has a return type with sizeof equal to
- * one plus the index of the parameter type within Sequence.  Thus, we can
- * deduce the type T of an expression as long as we can generate a finite set of
- * candidate types containing T via these apply overloads and the "sizeof
- * trick".
- ******************************************************************************/
-
-template< class First, class Last, std::size_t Index >
-struct conversion_test_overloads_iterate
-    : public conversion_test_overloads_iterate<
-          typename mpl::next< First >::type, Last, Index + 1
-      >
-{
-    using conversion_test_overloads_iterate<
-        typename mpl::next< First >::type, Last, Index + 1
-    >::apply;
-    static sizeof_t< Index + 1 >
-    apply(typename mpl::deref< First >::type);
-};
-
-template< class Last, std::size_t Index >
-struct conversion_test_overloads_iterate< Last, Last, Index >
-{ static sizeof_t< Index + 1 > apply(...); };
-
-template< class Sequence >
-struct conversion_test_overloads
-    : public conversion_test_overloads_iterate<
-          typename mpl::begin< Sequence >::type,
-          typename mpl::end< Sequence >::type,
-          0
-      >
-{ };
-
-/*******************************************************************************
- * struct select< Sequence, Index >
- *
- * select is synonymous with mpl::at_c unless Index equals the size of the
- * Boost.MPL Sequence, in which case this evaluates to void.
- ******************************************************************************/
-
-template<
-    class Sequence, int Index,
-    int N = mpl::size< Sequence >::value
->
-struct select
-    : public mpl::at_c< Sequence, Index >
-{ };
-template< class Sequence, int N >
-struct select< Sequence, N, N >
-{ typedef void type; };
-
-/*******************************************************************************
- * class deduce_common_type< T, U, NominalCandidates >
- * struct nominal_candidates<T,U>
- * struct common_type_dispatch_on_rvalueness<T,U>
- * struct common_type_impl<T,U>
- *
- * These classes and structs implement the logic behind common_type, which goes
- * roughly as follows.  Let C be the type of the conditional expression
- *     declval< bool >() ? declval<T>() : declval<U>()
- * if C is an rvalue, then:
- *     let T' and U' be T and U stripped of reference- and cv-qualifiers
- *     if T' and U' are pointer types, say, T' = V* and U' = W*, then:
- *         define the set of NominalCandidates to be
- *             { V*, W*, V'*, W'* }
- *           where V' is V with whatever cv-qualifiers are on W, and W' is W
- *           with whatever cv-qualifiers are on V
- *     else if T' and U' are both integral or enum types, then:
- *         define the set of NominalCandidates to be
- *             {
- *                 unsigned_soft(T'),
- *                 unsigned_soft(U'),
- *                 signed_soft(T'),
- *                 signed_soft(U'),
- *                 T',
- *                 U',
- *                 unsigned int,
- *                 int
- *             }
- *           where unsigned_soft(X) is make_unsigned_soft<X>::type and
- *           signed_soft(X) is make_signed_soft<X>::type (these are all
- *           generally necessary to cover the various integral promotion cases)
- *     else
- *         define the set of NominalCandidates to be
- *             { T', U' }
- * else
- *     let V and W be T and U stripped of reference-qualifiers
- *     define the set of NominalCandidates to be
- *         { V&, W&, V'&, W'& }
- *     where V' is V with whatever cv-qualifiers are on W, and W' is W with
- *       whatever cv-qualifiers are on V
- * define the set of Candidates to be equal to the set of NominalCandidates with
- * duplicates removed, and use this set of Candidates to determine C using the
- * conversion_test_overloads struct
- ******************************************************************************/
-
-template< class T, class U, class NominalCandidates >
-class deduce_common_type
-{
-    typedef typename mpl::copy<
-        NominalCandidates,
-        mpl::inserter<
-            mpl::vector0<>,
-            mpl::if_<
-                mpl::contains< mpl::_1, mpl::_2 >,
-                mpl::_1,
-                mpl::push_back< mpl::_1, mpl::_2 >
-            >
-        >
-    >::type candidate_types;
-    static const int best_candidate_index =
-        sizeof( conversion_test_overloads< candidate_types >::apply(
-            declval< bool >() ? declval<T>() : declval<U>()
-        ) ) - 1;
-public:
-    typedef typename select< candidate_types, best_candidate_index >::type type;
-};
-
-template<
-    class T, class U,
-    class V = typename remove_cv< typename remove_reference<T>::type >::type,
-    class W = typename remove_cv< typename remove_reference<U>::type >::type,
-    bool = is_integral_or_enum<V>::value && is_integral_or_enum<W>::value
->
-struct nominal_candidates
-{ typedef mpl::vector2<V,W> type; };
-
-template< class T, class U, class V, class W >
-struct nominal_candidates< T, U, V, W, true >
-{
-    typedef boost::mpl::vector8<
-        typename make_unsigned_soft<V>::type,
-        typename make_unsigned_soft<W>::type,
-        typename make_signed_soft<V>::type,
-        typename make_signed_soft<W>::type,
-        V, W, unsigned int, int
-    > type;
-};
-
-template< class T, class U, class V, class W >
-struct nominal_candidates< T, U, V*, W*, false >
-{
-    typedef mpl::vector4<
-        V*, W*,
-        typename propagate_cv<W,V>::type *,
-        typename propagate_cv<V,W>::type *
-    > type;
-};
-
-template<class T, class U, bool b>
-struct common_type_dispatch_on_rvalueness
-    : public deduce_common_type< T, U, typename nominal_candidates<T,U>::type >
-{ };
-
-template< class T, class U >
-struct common_type_dispatch_on_rvalueness< T, U, false >
-{
-private:
-    typedef typename remove_reference<T>::type unrefed_T_type;
-    typedef typename remove_reference<U>::type unrefed_U_type;
-public:
-    typedef typename deduce_common_type<
-        T, U,
-        mpl::vector4<
-            unrefed_T_type &,
-            unrefed_U_type &,
-            typename propagate_cv< unrefed_U_type, unrefed_T_type >::type &,
-            typename propagate_cv< unrefed_T_type, unrefed_U_type >::type &
-        >
-    >::type type;
-};
-
-template< class T, class U >
-struct common_type_impl
-    : public common_type_dispatch_on_rvalueness<T,U, sizeof( ::boost::detail_type_traits_common_type::rvalue_test(
-        declval< bool >() ? declval<T>() : declval<U>() ) ) == sizeof( yes_type ) >
-{ };
-
-template< class T > struct common_type_impl< T, void > { typedef void type; };
-template< class T > struct common_type_impl< void, T > { typedef void type; };
-template<> struct common_type_impl< void, void > { typedef void type; };
-
-} // namespace detail_type_traits_common_type
-
-
-} // namespace boost
-
-#endif // BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_HPP
-
diff --git a/3rdparty/boost/boost/type_traits/detail/common_type_impl.hpp b/3rdparty/boost/boost/type_traits/detail/common_type_impl.hpp
new file mode 100644 (file)
index 0000000..53a634d
--- /dev/null
@@ -0,0 +1,107 @@
+#ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMPL_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMPL_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/type_traits/detail/common_arithmetic_type.hpp>
+#include <boost/type_traits/detail/composite_pointer_type.hpp>
+#include <boost/type_traits/detail/composite_member_pointer_type.hpp>
+#include <boost/type_traits/type_identity.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_union.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/conditional.hpp>
+
+namespace boost
+{
+
+namespace type_traits_detail
+{
+
+// the arguments to common_type_impl have already been passed through decay<>
+
+template<class T, class U> struct common_type_impl;
+
+// same type
+
+template<class T> struct common_type_impl<T, T>
+{
+    typedef T type;
+};
+
+// one of the operands is a class type, try conversions in both directions
+
+template<class T, class U> struct ct_class
+{
+    BOOST_STATIC_CONSTANT( bool, ct = boost::is_class<T>::value || boost::is_union<T>::value );
+    BOOST_STATIC_CONSTANT( bool, cu = boost::is_class<U>::value || boost::is_union<U>::value );
+
+    BOOST_STATIC_CONSTANT( bool, value = ct || cu );
+};
+
+template<class T, class U> struct common_type_impl3;
+
+template<class T, class U> struct common_type_class: public boost::conditional<
+
+    boost::is_convertible<T, U>::value && !boost::is_convertible<U, T>::value,
+    boost::type_identity<U>,
+
+    typename boost::conditional<
+
+        boost::is_convertible<U, T>::value && !boost::is_convertible<T, U>::value,
+        boost::type_identity<T>,
+
+        common_type_impl3<T, U>
+    >::type
+>::type
+{
+};
+
+template<class T, class U> struct common_type_impl: public boost::conditional<
+    ct_class<T, U>::value,
+    common_type_class<T, U>,
+    common_type_impl3<T, U> >::type
+{
+};
+
+// pointers
+
+template<class T, class U> struct common_type_impl4;
+
+template<class T, class U> struct common_type_impl3: public boost::conditional<
+    boost::is_pointer<T>::value || boost::is_pointer<U>::value,
+    composite_pointer_type<T, U>,
+    common_type_impl4<T, U> >::type
+{
+};
+
+// pointers to members
+
+template<class T, class U> struct common_type_impl5;
+
+template<class T, class U> struct common_type_impl4: public boost::conditional<
+    boost::is_member_pointer<T>::value || boost::is_member_pointer<U>::value,
+    composite_member_pointer_type<T, U>,
+    common_type_impl5<T, U> >::type
+{
+};
+
+// arithmetic types (including class types w/ conversions to arithmetic and enums)
+
+template<class T, class U> struct common_type_impl5: public common_arithmetic_type<T, U>
+{
+};
+
+} // namespace type_traits_detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMPL_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/detail/composite_member_pointer_type.hpp b/3rdparty/boost/boost/type_traits/detail/composite_member_pointer_type.hpp
new file mode 100644 (file)
index 0000000..a747ee4
--- /dev/null
@@ -0,0 +1,113 @@
+#ifndef BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_MEMBER_POINTER_TYPE_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_MEMBER_POINTER_TYPE_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/type_traits/detail/composite_pointer_type.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/conditional.hpp>
+#include <boost/config.hpp>
+#include <cstddef>
+
+namespace boost
+{
+
+namespace type_traits_detail
+{
+
+template<class T, class U> struct composite_member_pointer_type;
+
+// nullptr_t
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+#if !defined( BOOST_NO_CXX11_DECLTYPE ) && ( ( defined( __clang__ ) && !defined( _LIBCPP_VERSION ) ) || defined( __INTEL_COMPILER ) )
+
+template<class C, class T> struct composite_member_pointer_type<T C::*, decltype(nullptr)>
+{
+    typedef T C::* type;
+};
+
+template<class C, class T> struct composite_member_pointer_type<decltype(nullptr), T C::*>
+{
+    typedef T C::* type;
+};
+
+template<> struct composite_member_pointer_type<decltype(nullptr), decltype(nullptr)>
+{
+    typedef decltype(nullptr) type;
+};
+
+#else
+
+template<class C, class T> struct composite_member_pointer_type<T C::*, std::nullptr_t>
+{
+    typedef T C::* type;
+};
+
+template<class C, class T> struct composite_member_pointer_type<std::nullptr_t, T C::*>
+{
+    typedef T C::* type;
+};
+
+template<> struct composite_member_pointer_type<std::nullptr_t, std::nullptr_t>
+{
+    typedef std::nullptr_t type;
+};
+
+#endif
+
+#endif // !defined( BOOST_NO_CXX11_NULLPTR )
+
+template<class C1, class C2> struct common_member_class;
+
+template<class C> struct common_member_class<C, C>
+{
+    typedef C type;
+};
+
+template<class C1, class C2> struct common_member_class
+{
+    typedef typename boost::conditional<
+
+        boost::is_base_of<C1, C2>::value,
+        C2,
+        typename boost::conditional<boost::is_base_of<C2, C1>::value, C1, void>::type
+
+    >::type type;
+};
+
+//This indirection avoids compilation errors on some older 
+//compilers like MSVC 7.1
+template<class CT, class CB>
+struct common_member_class_pointer_to_member
+{
+    typedef CT CB::* type;
+};
+
+template<class C1, class T1, class C2, class T2> struct composite_member_pointer_type<T1 C1::*, T2 C2::*>
+{
+private:
+
+    typedef typename composite_pointer_type<T1*, T2*>::type CPT;
+    typedef typename boost::remove_pointer<CPT>::type CT;
+
+    typedef typename common_member_class<C1, C2>::type CB;
+
+public:
+
+    typedef typename common_member_class_pointer_to_member<CT, CB>::type type;
+};
+
+} // namespace type_traits_detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_MEMBER_POINTER_TYPE_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/detail/composite_pointer_type.hpp b/3rdparty/boost/boost/type_traits/detail/composite_pointer_type.hpp
new file mode 100644 (file)
index 0000000..ae21e18
--- /dev/null
@@ -0,0 +1,153 @@
+#ifndef BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_POINTER_TYPE_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_POINTER_TYPE_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/type_traits/copy_cv.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/config.hpp>
+#include <cstddef>
+
+namespace boost
+{
+
+namespace type_traits_detail
+{
+
+template<class T, class U> struct composite_pointer_type;
+
+// same type
+
+template<class T> struct composite_pointer_type<T*, T*>
+{
+    typedef T* type;
+};
+
+// nullptr_t
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+#if !defined( BOOST_NO_CXX11_DECLTYPE ) && ( ( defined( __clang__ ) && !defined( _LIBCPP_VERSION ) ) || defined( __INTEL_COMPILER ) )
+
+template<class T> struct composite_pointer_type<T*, decltype(nullptr)>
+{
+    typedef T* type;
+};
+
+template<class T> struct composite_pointer_type<decltype(nullptr), T*>
+{
+    typedef T* type;
+};
+
+template<> struct composite_pointer_type<decltype(nullptr), decltype(nullptr)>
+{
+    typedef decltype(nullptr) type;
+};
+
+#else
+
+template<class T> struct composite_pointer_type<T*, std::nullptr_t>
+{
+    typedef T* type;
+};
+
+template<class T> struct composite_pointer_type<std::nullptr_t, T*>
+{
+    typedef T* type;
+};
+
+template<> struct composite_pointer_type<std::nullptr_t, std::nullptr_t>
+{
+    typedef std::nullptr_t type;
+};
+
+#endif
+
+#endif // !defined( BOOST_NO_CXX11_NULLPTR )
+
+namespace detail
+{
+
+template<class T, class U> struct has_common_pointee
+{
+private:
+
+    typedef typename boost::remove_cv<T>::type T2;
+    typedef typename boost::remove_cv<U>::type U2;
+
+public:
+
+    BOOST_STATIC_CONSTANT( bool, value =
+        (boost::is_same<T2, U2>::value)
+        || boost::is_void<T2>::value
+        || boost::is_void<U2>::value
+        || (boost::is_base_of<T2, U2>::value)
+        || (boost::is_base_of<U2, T2>::value) );
+};
+
+template<class T, class U> struct common_pointee
+{
+private:
+
+    typedef typename boost::remove_cv<T>::type T2;
+    typedef typename boost::remove_cv<U>::type U2;
+
+public:
+
+    typedef typename boost::conditional<
+
+        boost::is_same<T2, U2>::value || boost::is_void<T2>::value || boost::is_base_of<T2, U2>::value,
+        typename boost::copy_cv<T, U>::type,
+        typename boost::copy_cv<U, T>::type
+
+    >::type type;
+};
+
+template<class T, class U> struct composite_pointer_impl
+{
+private:
+
+    typedef typename boost::remove_cv<T>::type T2;
+    typedef typename boost::remove_cv<U>::type U2;
+
+public:
+
+    typedef typename boost::copy_cv<typename boost::copy_cv<typename composite_pointer_type<T2, U2>::type const, T>::type, U>::type type;
+};
+
+//Old compilers like MSVC-7.1 have problems using boost::conditional in
+//composite_pointer_type. Partially specializing on has_common_pointee<T, U>::value
+//seems to make their life easier
+template<class T, class U, bool = has_common_pointee<T, U>::value >
+struct composite_pointer_type_dispatch
+   : common_pointee<T, U>
+{};
+
+template<class T, class U>
+struct composite_pointer_type_dispatch<T, U, false>
+   : composite_pointer_impl<T, U>
+{};
+
+
+} // detail
+
+
+template<class T, class U> struct composite_pointer_type<T*, U*>
+{
+    typedef typename detail::composite_pointer_type_dispatch<T, U>::type* type;
+};
+
+} // namespace type_traits_detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_POINTER_TYPE_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/detail/config.hpp b/3rdparty/boost/boost/type_traits/detail/config.hpp
new file mode 100644 (file)
index 0000000..ebb1dd6
--- /dev/null
@@ -0,0 +1,72 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_CONFIG_HPP_INCLUDED
+#define BOOST_TT_CONFIG_HPP_INCLUDED
+
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+#include <boost/version.hpp>
+#include <boost/detail/workaround.hpp>
+
+//
+// whenever we have a conversion function with ellipses
+// it needs to be declared __cdecl to suppress compiler
+// warnings from MS and Borland compilers (this *must*
+// appear before we include is_same.hpp below):
+#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32))
+#   define BOOST_TT_DECL __cdecl
+#else
+#   define BOOST_TT_DECL /**/
+#endif
+
+# if (BOOST_WORKAROUND(__MWERKS__, < 0x3000)                         \
+    || BOOST_WORKAROUND(__IBMCPP__, < 600 )                         \
+    || BOOST_WORKAROUND(__BORLANDC__, < 0x5A0)                      \
+    || defined(__ghs)                                               \
+    || BOOST_WORKAROUND(__HP_aCC, < 60700)           \
+    || BOOST_WORKAROUND(MPW_CPLUS, BOOST_TESTED_AT(0x890))          \
+    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580)))       \
+    && defined(BOOST_NO_IS_ABSTRACT)
+
+#   define BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION 1
+
+#endif
+
+#ifndef BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION
+# define BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION 1
+#endif
+
+//
+// define BOOST_TT_TEST_MS_FUNC_SIGS
+// when we want to test __stdcall etc function types with is_function etc
+// (Note, does not work with Borland, even though it does support __stdcall etc):
+//
+#if defined(_MSC_EXTENSIONS) && !defined(__BORLANDC__)
+#  define BOOST_TT_TEST_MS_FUNC_SIGS
+#endif
+
+//
+// define BOOST_TT_NO_CV_FUNC_TEST
+// if tests for cv-qualified member functions don't 
+// work in is_member_function_pointer
+//
+#if BOOST_WORKAROUND(__MWERKS__, < 0x3000) || BOOST_WORKAROUND(__IBMCPP__, <= 600)
+#  define BOOST_TT_NO_CV_FUNC_TEST
+#endif
+
+//
+// Macros that have been deprecated, defined here for backwards compatibility:
+//
+#define BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(x)
+#define BOOST_TT_BROKEN_COMPILER_SPEC(x)
+
+#endif // BOOST_TT_CONFIG_HPP_INCLUDED
+
+
diff --git a/3rdparty/boost/boost/type_traits/detail/cv_traits_impl.hpp b/3rdparty/boost/boost/type_traits/detail/cv_traits_impl.hpp
deleted file mode 100644 (file)
index 8e995bb..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-
-//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
-//  Hinnant & John Maddock 2000.  
-//  Use, modification and distribution are subject to the Boost Software License,
-//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-//  http://www.boost.org/LICENSE_1_0.txt).
-//
-//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
-
-
-#ifndef BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
-#define BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
-
-#include <cstddef>
-#include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
-
-
-// implementation helper:
-
-
-namespace boost {
-namespace detail {
-
-#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)
-#define BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(X) X
-   template <typename T>
-   struct cv_traits_imp
-   {
-      BOOST_STATIC_CONSTANT(bool, is_const = false);
-      BOOST_STATIC_CONSTANT(bool, is_volatile = false);
-      typedef T unqualified_type;
-   };
-
-   template <typename T>
-   struct cv_traits_imp<T[]>
-   {
-      BOOST_STATIC_CONSTANT(bool, is_const = false);
-      BOOST_STATIC_CONSTANT(bool, is_volatile = false);
-      typedef T unqualified_type[];
-   };
-
-   template <typename T>
-   struct cv_traits_imp<const T[]>
-   {
-      BOOST_STATIC_CONSTANT(bool, is_const = true);
-      BOOST_STATIC_CONSTANT(bool, is_volatile = false);
-      typedef T unqualified_type[];
-   };
-
-   template <typename T>
-   struct cv_traits_imp<volatile T[]>
-   {
-      BOOST_STATIC_CONSTANT(bool, is_const = false);
-      BOOST_STATIC_CONSTANT(bool, is_volatile = true);
-      typedef T unqualified_type[];
-   };
-
-   template <typename T>
-   struct cv_traits_imp<const volatile T[]>
-   {
-      BOOST_STATIC_CONSTANT(bool, is_const = true);
-      BOOST_STATIC_CONSTANT(bool, is_volatile = true);
-      typedef T unqualified_type[];
-   };
-
-   template <typename T, std::size_t N>
-   struct cv_traits_imp<T[N]>
-   {
-      BOOST_STATIC_CONSTANT(bool, is_const = false);
-      BOOST_STATIC_CONSTANT(bool, is_volatile = false);
-      typedef T unqualified_type[N];
-   };
-
-   template <typename T, std::size_t N>
-   struct cv_traits_imp<const T[N]>
-   {
-      BOOST_STATIC_CONSTANT(bool, is_const = true);
-      BOOST_STATIC_CONSTANT(bool, is_volatile = false);
-      typedef T unqualified_type[N];
-   };
-
-   template <typename T, std::size_t N>
-   struct cv_traits_imp<volatile T[N]>
-   {
-      BOOST_STATIC_CONSTANT(bool, is_const = false);
-      BOOST_STATIC_CONSTANT(bool, is_volatile = true);
-      typedef T unqualified_type[N];
-   };
-
-   template <typename T, std::size_t N>
-   struct cv_traits_imp<const volatile T[N]>
-   {
-      BOOST_STATIC_CONSTANT(bool, is_const = true);
-      BOOST_STATIC_CONSTANT(bool, is_volatile = true);
-      typedef T unqualified_type[N];
-   };
-
-#else
-#define BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(X) X *
-template <typename T> struct cv_traits_imp {};
-
-template <typename T>
-struct cv_traits_imp<T*>
-{
-    BOOST_STATIC_CONSTANT(bool, is_const = false);
-    BOOST_STATIC_CONSTANT(bool, is_volatile = false);
-    typedef T unqualified_type;
-};
-#endif
-
-template <typename T>
-struct cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(const T)>
-{
-    BOOST_STATIC_CONSTANT(bool, is_const = true);
-    BOOST_STATIC_CONSTANT(bool, is_volatile = false);
-    typedef T unqualified_type;
-};
-
-template <typename T>
-struct cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(volatile T)>
-{
-    BOOST_STATIC_CONSTANT(bool, is_const = false);
-    BOOST_STATIC_CONSTANT(bool, is_volatile = true);
-    typedef T unqualified_type;
-};
-
-template <typename T>
-struct cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(const volatile T)>
-{
-    BOOST_STATIC_CONSTANT(bool, is_const = true);
-    BOOST_STATIC_CONSTANT(bool, is_volatile = true);
-    typedef T unqualified_type;
-};
-
-} // namespace detail
-} // namespace boost 
-
-
-#endif // BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/detail/false_result.hpp b/3rdparty/boost/boost/type_traits/detail/false_result.hpp
deleted file mode 100644 (file)
index e65e8bc..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-//  Copyright David Abrahams 2002. 
-//  Use, modification and distribution are subject to the Boost Software License,
-//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-//  http://www.boost.org/LICENSE_1_0.txt).
-//
-//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
-
-
-#ifndef BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED
-#define BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED
-
-#include <boost/config.hpp>
-
-namespace boost {
-namespace type_traits {
-
-// Utility class which always "returns" false
-struct false_result
-{
-    template <typename T> struct result_
-    {
-        BOOST_STATIC_CONSTANT(bool, value = false);
-    };
-};
-
-}} // namespace boost::type_traits
-
-#endif // BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED
index d82a5cefdb90f78b05cc5484706c324dd9ad01c1..039a6bb7783715475f832b5d485573233d88abb4 100644 (file)
@@ -7,7 +7,7 @@
 //  See http://www.boost.org/libs/type_traits for most recent version including documentation.
 
 #include <boost/config.hpp>
-#include <boost/type_traits/ice.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
 #include <boost/type_traits/integral_constant.hpp>
 #include <boost/type_traits/is_base_of.hpp>
 #include <boost/type_traits/is_const.hpp>
@@ -21,9 +21,6 @@
 #include <boost/type_traits/remove_pointer.hpp>
 #include <boost/type_traits/remove_reference.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 // cannot include this header without getting warnings of the kind:
 // gcc:
 //    warning: value computed is not used
 #   pragma GCC system_header
 #elif defined(BOOST_MSVC)
 #   pragma warning ( push )
-#   pragma warning ( disable : 4018 4244 4547 4800 4804 4805 4913 )
+#   pragma warning ( disable : 4018 4244 4547 4800 4804 4805 4913)
+#   if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#       pragma warning ( disable : 6334)
+#   endif
 #endif
 
 namespace boost {
@@ -177,13 +177,7 @@ struct trait_impl1 < Lhs, Rhs, Ret, true > {
 template < typename Lhs, typename Rhs, typename Ret >
 struct trait_impl1 < Lhs, Rhs, Ret, false > {
    BOOST_STATIC_CONSTANT(bool,
-      value = (
-         ::boost::type_traits::ice_and<
-            operator_exists < Lhs, Rhs >::value,
-            operator_returns_Ret < Lhs, Rhs, Ret, operator_returns_void < Lhs, Rhs >::value >::value
-         >::value
-      )
-   );
+      value = (operator_exists < Lhs, Rhs >::value && operator_returns_Ret < Lhs, Rhs, Ret, operator_returns_void < Lhs, Rhs >::value >::value));
 };
 
 // some specializations needs to be declared for the special void case
@@ -218,12 +212,11 @@ struct trait_impl {
 } // namespace detail
 
 // this is the accessible definition of the trait to end user
-BOOST_TT_AUX_BOOL_TRAIT_DEF3(BOOST_TT_TRAIT_NAME, Lhs, Rhs=Lhs, Ret=::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::dont_care, (::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::trait_impl < Lhs, Rhs, Ret >::value))
+template <class Lhs, class Rhs=Lhs, class Ret=::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::dont_care>
+struct BOOST_TT_TRAIT_NAME : public integral_constant<bool, (::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME, _impl)::trait_impl < Lhs, Rhs, Ret >::value)>{};
 
 } // namespace boost
 
 #if defined(BOOST_MSVC)
 #   pragma warning ( pop )
 #endif
-
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
index e9048e12140922e56d3dcc9a01c5ff89fed3308f..3e686f12b5b32f4735e29f28050351da936a2142 100644 (file)
@@ -7,7 +7,7 @@
 //  See http://www.boost.org/libs/type_traits for most recent version including documentation.
 
 #include <boost/config.hpp>
-#include <boost/type_traits/ice.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
 #include <boost/type_traits/integral_constant.hpp>
 #include <boost/type_traits/is_const.hpp>
 #include <boost/type_traits/is_fundamental.hpp>
 #include <boost/type_traits/remove_pointer.hpp>
 #include <boost/type_traits/remove_reference.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 // avoid warnings
 #if defined(__GNUC__)
 #   pragma GCC system_header
 #elif defined(BOOST_MSVC)
 #   pragma warning ( push )
-#   pragma warning ( disable : 4244 4913 )
+#   pragma warning ( disable : 4244 4913)
+#   if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#       pragma warning ( disable : 6334)
+#   endif
 #endif
 
 namespace boost {
@@ -163,13 +163,7 @@ struct trait_impl1 < Lhs, Ret, true > {
 template < typename Lhs, typename Ret >
 struct trait_impl1 < Lhs, Ret, false > {
    BOOST_STATIC_CONSTANT(bool,
-      value = (
-         ::boost::type_traits::ice_and<
-            operator_exists < Lhs >::value,
-            operator_returns_Ret < Lhs, Ret, operator_returns_void < Lhs >::value >::value
-         >::value
-      )
-   );
+      value = (operator_exists < Lhs >::value && operator_returns_Ret < Lhs, Ret, operator_returns_void < Lhs >::value >::value));
 };
 
 // specialization needs to be declared for the special void case
@@ -191,12 +185,11 @@ struct trait_impl {
 } // namespace detail
 
 // this is the accessible definition of the trait to end user
-BOOST_TT_AUX_BOOL_TRAIT_DEF2(BOOST_TT_TRAIT_NAME, Lhs, Ret=::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::dont_care, (::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::trait_impl< Lhs, Ret >::value))
+template <class Lhs, class Ret=::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::dont_care>
+struct BOOST_TT_TRAIT_NAME : public integral_constant<bool, (::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME, _impl)::trait_impl< Lhs, Ret >::value)>{};
 
 } // namespace boost
 
 #if defined(BOOST_MSVC)
 #   pragma warning ( pop )
 #endif
-
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
index e1cf8d054f962eee9fd411872358acd22c6340b0..d4574fc60d277be58066ed33fe70809ce9caa3ef 100644 (file)
@@ -7,7 +7,7 @@
 //  See http://www.boost.org/libs/type_traits for most recent version including documentation.
 
 #include <boost/config.hpp>
-#include <boost/type_traits/ice.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
 #include <boost/type_traits/integral_constant.hpp>
 #include <boost/type_traits/is_const.hpp>
 #include <boost/type_traits/is_fundamental.hpp>
@@ -19,9 +19,6 @@
 #include <boost/type_traits/remove_pointer.hpp>
 #include <boost/type_traits/remove_reference.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 // cannot include this header without getting warnings of the kind:
 // gcc:
 //    warning: value computed is not used
 #   pragma GCC system_header
 #elif defined(BOOST_MSVC)
 #   pragma warning ( push )
-#   pragma warning ( disable : 4146 4804 4913 4244 )
+#   pragma warning ( disable : 4146 4804 4913 4244)
+#   if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#       pragma warning ( disable : 6334)
+#   endif
 #endif
 
+
+
 namespace boost {
 namespace detail {
 
@@ -171,13 +173,7 @@ struct trait_impl1 < Rhs, Ret, true > {
 template < typename Rhs, typename Ret >
 struct trait_impl1 < Rhs, Ret, false > {
    BOOST_STATIC_CONSTANT(bool,
-      value = (
-         ::boost::type_traits::ice_and<
-            operator_exists < Rhs >::value,
-            operator_returns_Ret < Rhs, Ret, operator_returns_void < Rhs >::value >::value
-         >::value
-      )
-   );
+      value = (operator_exists < Rhs >::value && operator_returns_Ret < Rhs, Ret, operator_returns_void < Rhs >::value >::value));
 };
 
 // specialization needs to be declared for the special void case
@@ -199,12 +195,11 @@ struct trait_impl {
 } // namespace detail
 
 // this is the accessible definition of the trait to end user
-BOOST_TT_AUX_BOOL_TRAIT_DEF2(BOOST_TT_TRAIT_NAME, Rhs, Ret=::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::dont_care, (::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::trait_impl < Rhs, Ret >::value))
+template <class Rhs, class Ret=::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::dont_care>
+struct BOOST_TT_TRAIT_NAME : public integral_constant<bool, (::boost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME, _impl)::trait_impl < Rhs, Ret >::value)>{};
 
 } // namespace boost
 
 #if defined(BOOST_MSVC)
 #   pragma warning ( pop )
 #endif
-
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
diff --git a/3rdparty/boost/boost/type_traits/detail/ice_and.hpp b/3rdparty/boost/boost/type_traits/detail/ice_and.hpp
deleted file mode 100644 (file)
index 8b461b9..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-//  (C) Copyright John Maddock and Steve Cleary 2000.
-//
-//  Use, modification and distribution are subject to the Boost Software License,
-//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-//  http://www.boost.org/LICENSE_1_0.txt).
-//
-//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
-
-#ifndef BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED
-#define BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED
-
-#include <boost/config.hpp>
-
-namespace boost {
-namespace type_traits {
-
-template <bool b1, bool b2, bool b3 = true, bool b4 = true, bool b5 = true, bool b6 = true, bool b7 = true>
-struct ice_and;
-
-template <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>
-struct ice_and
-{
-    BOOST_STATIC_CONSTANT(bool, value = false);
-};
-
-template <>
-struct ice_and<true, true, true, true, true, true, true>
-{
-    BOOST_STATIC_CONSTANT(bool, value = true);
-};
-
-} // namespace type_traits
-} // namespace boost
-
-#endif // BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/detail/ice_eq.hpp b/3rdparty/boost/boost/type_traits/detail/ice_eq.hpp
deleted file mode 100644 (file)
index ea42a60..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-//  (C) Copyright John Maddock and Steve Cleary 2000.
-//  Use, modification and distribution are subject to the Boost Software License,
-//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-//  http://www.boost.org/LICENSE_1_0.txt).
-//
-//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
-
-#ifndef BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED
-#define BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED
-
-#include <boost/config.hpp>
-
-namespace boost {
-namespace type_traits {
-
-template <int b1, int b2>
-struct ice_eq
-{
-    BOOST_STATIC_CONSTANT(bool, value = (b1 == b2));
-};
-
-template <int b1, int b2>
-struct ice_ne
-{
-    BOOST_STATIC_CONSTANT(bool, value = (b1 != b2));
-};
-
-#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
-template <int b1, int b2> bool const ice_eq<b1,b2>::value;
-template <int b1, int b2> bool const ice_ne<b1,b2>::value;
-#endif
-
-} // namespace type_traits
-} // namespace boost
-
-#endif // BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/detail/ice_not.hpp b/3rdparty/boost/boost/type_traits/detail/ice_not.hpp
deleted file mode 100644 (file)
index ee1dca0..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-//  (C) Copyright John Maddock and Steve Cleary 2000.
-//  Use, modification and distribution are subject to the Boost Software License,
-//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-//  http://www.boost.org/LICENSE_1_0.txt).
-//
-//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
-
-#ifndef BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED
-#define BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED
-
-#include <boost/config.hpp>
-
-namespace boost {
-namespace type_traits {
-
-template <bool b>
-struct ice_not
-{
-    BOOST_STATIC_CONSTANT(bool, value = true);
-};
-
-template <>
-struct ice_not<true>
-{
-    BOOST_STATIC_CONSTANT(bool, value = false);
-};
-
-} // namespace type_traits
-} // namespace boost
-
-#endif // BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/detail/ice_or.hpp b/3rdparty/boost/boost/type_traits/detail/ice_or.hpp
deleted file mode 100644 (file)
index f88d9f6..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-//  (C) Copyright John Maddock and Steve Cleary 2000.
-//  Use, modification and distribution are subject to the Boost Software License,
-//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-//  http://www.boost.org/LICENSE_1_0.txt).
-//
-//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
-
-#ifndef BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED
-#define BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED
-
-#include <boost/config.hpp>
-
-namespace boost {
-namespace type_traits {
-
-template <bool b1, bool b2, bool b3 = false, bool b4 = false, bool b5 = false, bool b6 = false, bool b7 = false>
-struct ice_or;
-
-template <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>
-struct ice_or
-{
-    BOOST_STATIC_CONSTANT(bool, value = true);
-};
-
-template <>
-struct ice_or<false, false, false, false, false, false, false>
-{
-    BOOST_STATIC_CONSTANT(bool, value = false);
-};
-
-} // namespace type_traits
-} // namespace boost
-
-#endif // BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED
index 1c3b17f6d2629604c4e2fdc342886563c2458767..3538e402dae1256983d06bf928d8f3f981a714a1 100644 (file)
 #ifndef BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED
 #define BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
-
 #if defined(BOOST_TT_PREPROCESSING_MODE)
-#   include <boost/preprocessor/iterate.hpp>
-#   include <boost/preprocessor/enum_params.hpp>
-#   include <boost/preprocessor/comma_if.hpp>
+//
+// Hide these #include from dependency analysers as
+// these are required in maintenance mode only:
+//
+#define PP1 <boost/preprocessor/iterate.hpp>
+#include PP1
+#undef PP1
+#define PP1 <boost/preprocessor/enum_params.hpp>
+#include PP1
+#undef PP1
+#define PP1 <boost/preprocessor/comma_if.hpp>
+#include PP1
+#undef PP1
 #endif
 
 namespace boost {
index 2eb8a6f47f8be2c73f2a3a1fcf2a223606762af9..4fe88e81b2cfea5a6668f776424d0b5bf158c367 100644 (file)
 #define BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED
 
 #include <boost/type_traits/detail/yes_no_type.hpp>
-#include <boost/type_traits/config.hpp>
 
 #if defined(BOOST_TT_PREPROCESSING_MODE)
-#   include <boost/preprocessor/iterate.hpp>
-#   include <boost/preprocessor/enum_params.hpp>
-#   include <boost/preprocessor/comma_if.hpp>
+//
+// Hide include dependencies from analysers since they're
+// only require in maintenance mode:
+//
+#define PP1 <boost/preprocessor/iterate.hpp>
+#define PP2 <boost/preprocessor/enum_params.hpp>
+#define PP3 <boost/preprocessor/comma_if.hpp>
+#include PP1
+#include PP2
+#include PP3
+#undef PP1
+#undef PP2
+#undef PP3
 #endif
 
 namespace boost {
index bd5c591b2042818a2ae381d89770bc8988cd4961..5698a74897d4dda5dab255545cbae62f9b37e879 100644 (file)
 #include <boost/config.hpp>
 
 #if defined(BOOST_TT_PREPROCESSING_MODE)
-#   include <boost/preprocessor/iterate.hpp>
-#   include <boost/preprocessor/enum_params.hpp>
-#   include <boost/preprocessor/comma_if.hpp>
+//
+// Maintenance mode, hide include dependencies
+// from trackers:
+//
+#define PPI <boost/preprocessor/iterate.hpp>
+#include PPI
+#undef PPI
+#define PPI <boost/preprocessor/enum_params.hpp>
+#include PPI
+#undef PPI
+#define PPI <boost/preprocessor/comma_if.hpp>
+#include PPI
+#undef PPI
 #endif
 
 namespace boost {
index 334a843450723d08077efb50aef198a73db0cb9f..5e316931110226db1f85e8952f3d3a93f7aca6e9 100644 (file)
 #define BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED
 
 #include <boost/type_traits/detail/yes_no_type.hpp>
-#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/detail/config.hpp>
 
 #if defined(BOOST_TT_PREPROCESSING_MODE)
-#   include <boost/preprocessor/iterate.hpp>
-#   include <boost/preprocessor/enum_params.hpp>
-#   include <boost/preprocessor/comma_if.hpp>
+//
+// Maintentance mode, hide include dependencies
+// from dependency trackers:
+//
+#define PPI <boost/preprocessor/iterate.hpp>
+#include PPI
+#undef PPI
+#define PPI <boost/preprocessor/enum_params.hpp>
+#include PPI
+#undef PPI
+#define <boost/preprocessor/comma_if.hpp>
+#include PPI
+#undef
 #endif
 
 namespace boost {
diff --git a/3rdparty/boost/boost/type_traits/detail/mp_defer.hpp b/3rdparty/boost/boost/type_traits/detail/mp_defer.hpp
new file mode 100644 (file)
index 0000000..7910e54
--- /dev/null
@@ -0,0 +1,56 @@
+#ifndef BOOST_TYPE_TRAITS_DETAIL_MP_DEFER_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DETAIL_MP_DEFER_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/conditional.hpp>
+
+namespace boost
+{
+
+namespace type_traits_detail
+{
+
+// mp_valid
+// implementation by Bruno Dutra (by the name is_evaluable)
+
+template<template<class...> class F, class... T>
+struct mp_valid_impl
+{
+    template<template<class...> class G, class = G<T...>>
+    static boost::true_type check(int);
+
+    template<template<class...> class>
+    static boost::false_type check(...);
+
+    using type = decltype(check<F>(0));
+};
+
+template<template<class...> class F, class... T>
+using mp_valid = typename mp_valid_impl<F, T...>::type;
+
+// mp_defer
+
+struct mp_empty
+{
+};
+
+template<template<class...> class F, class... T> struct mp_defer_impl
+{
+    using type = F<T...>;
+};
+
+template<template<class...> class F, class... T> using mp_defer = typename boost::conditional<mp_valid<F, T...>::value, mp_defer_impl<F, T...>, mp_empty>::type;
+
+} // namespace type_traits_detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_MP_DEFER_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/detail/size_t_trait_def.hpp b/3rdparty/boost/boost/type_traits/detail/size_t_trait_def.hpp
deleted file mode 100644 (file)
index 8cea9b4..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-
-// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// Distributed under the Boost Software License, Version 1.0. 
-// (See accompanying file LICENSE_1_0.txt or copy at 
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// $Source$
-// $Date$
-// $Revision$
-
-#include <boost/type_traits/detail/template_arity_spec.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-#include <boost/mpl/size_t.hpp>
-
-#include <cstddef>
-
-// Obsolete. Remove.
-#define BOOST_TT_AUX_SIZE_T_BASE(C) public ::boost::integral_constant<std::size_t,C>
-#define BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) /**/
-
-
-#define BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(trait,T,C) \
-template< typename T > struct trait \
-    : public ::boost::integral_constant<std::size_t,C> \
-{ \
-public:\
-    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \
-}; \
-\
-BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \
-/**/
-
-#define BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(trait,spec,C) \
-template<> struct trait<spec> \
-    : public ::boost::integral_constant<std::size_t,C> \
-{ \
-public:\
-    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(spec)) \
-}; \
-/**/
-
-#define BOOST_TT_AUX_SIZE_T_TRAIT_PARTIAL_SPEC1_1(param,trait,spec,C) \
-template< param > struct trait<spec> \
-    : public ::boost::integral_constant<std::size_t,C> \
-{ \
-}; \
-/**/
diff --git a/3rdparty/boost/boost/type_traits/detail/size_t_trait_undef.hpp b/3rdparty/boost/boost/type_traits/detail/size_t_trait_undef.hpp
deleted file mode 100644 (file)
index 1694fac..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// Distributed under the Boost Software License, Version 1.0. 
-// (See accompanying file LICENSE_1_0.txt or copy at 
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// $Source$
-// $Date$
-// $Revision$
-
-#undef BOOST_TT_AUX_SIZE_T_TRAIT_DEF1
-#undef BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1
-#undef BOOST_TT_AUX_SIZE_T_TRAIT_PARTIAL_SPEC1_1
diff --git a/3rdparty/boost/boost/type_traits/detail/template_arity_spec.hpp b/3rdparty/boost/boost/type_traits/detail/template_arity_spec.hpp
deleted file mode 100644 (file)
index fe9b422..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-
-// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// Distributed under the Boost Software License, Version 1.0. 
-// (See accompanying file LICENSE_1_0.txt or copy at 
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/aux_/template_arity_fwd.hpp>
-#include <boost/mpl/aux_/preprocessor/params.hpp>
-#include <boost/mpl/aux_/config/lambda.hpp>
-#include <boost/mpl/aux_/config/overload_resolution.hpp>
-
-#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \
-    && defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION)
-#   define BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(i, name) \
-namespace mpl { namespace aux { \
-template< BOOST_MPL_PP_PARAMS(i, typename T) > \
-struct template_arity< \
-          name< BOOST_MPL_PP_PARAMS(i, T) > \
-        > \
-    : int_<i> \
-{ \
-}; \
-}} \
-/**/
-#else
-#   define BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/
-#endif
diff --git a/3rdparty/boost/boost/type_traits/detail/type_trait_def.hpp b/3rdparty/boost/boost/type_traits/detail/type_trait_def.hpp
deleted file mode 100644 (file)
index bc54696..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-
-// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// Distributed under the Boost Software License, Version 1.0. 
-// (See accompanying file LICENSE_1_0.txt or copy at 
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// $Source$
-// $Date$
-// $Revision$
-
-#include <boost/type_traits/detail/template_arity_spec.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-#define BOOST_TT_AUX_TYPE_TRAIT_DEF1(trait,T,result) \
-template< typename T > struct trait \
-{ \
-public:\
-    typedef result type; \
-    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \
-}; \
-\
-BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \
-/**/
-
-#define BOOST_TT_AUX_TYPE_TRAIT_SPEC1(trait,spec,result) \
-template<> struct trait<spec> \
-{ \
-public:\
-    typedef result type; \
-    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(spec)) \
-}; \
-/**/
-
-#define BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(trait,spec,result) \
-template<> struct trait##_impl<spec> \
-{ \
-public:\
-    typedef result type; \
-}; \
-/**/
-
-#define BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(param,trait,spec,result) \
-template< param > struct trait<spec> \
-{ \
-public:\
-    typedef result type; \
-}; \
-/**/
-
-#define BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(param1,param2,trait,spec,result) \
-template< param1, param2 > struct trait<spec> \
-{ \
-public:\
-    typedef result; \
-}; \
-/**/
-
-#define BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1(param,trait,spec,result) \
-template< param > struct trait##_impl<spec> \
-{ \
-public:\
-    typedef result type; \
-}; \
-/**/
diff --git a/3rdparty/boost/boost/type_traits/detail/type_trait_undef.hpp b/3rdparty/boost/boost/type_traits/detail/type_trait_undef.hpp
deleted file mode 100644 (file)
index d8edf66..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-
-// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
-
-// Copyright Aleksey Gurtovoy 2002-2004
-//
-// Distributed under the Boost Software License, Version 1.0. 
-// (See accompanying file LICENSE_1_0.txt or copy at 
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// $Source$
-// $Date$
-// $Revision$
-
-#undef BOOST_TT_AUX_TYPE_TRAIT_DEF1
-#undef BOOST_TT_AUX_TYPE_TRAIT_SPEC1
-#undef BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1
-#undef BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1
-#undef BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2
-#undef BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1
index c41f7f2ffe083fd5b3acbb90b563866469fb8226..dfb3c54ee885b898c686a675c54826a6e98f22b1 100644 (file)
@@ -10,8 +10,8 @@
 #ifndef BOOST_TT_EXTENT_HPP_INCLUDED
 #define BOOST_TT_EXTENT_HPP_INCLUDED
 
-// should be the last #include
-#include <boost/type_traits/detail/size_t_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/detail/workaround.hpp>
 
 namespace boost {
 
@@ -131,11 +131,8 @@ template <class T, std::size_t N = 0>
 struct extent
    : public ::boost::integral_constant<std::size_t, ::boost::detail::extent_imp<T,N>::value>
 {
-    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,extent,(T))
 };
 
 } // namespace boost
 
-#include <boost/type_traits/detail/size_t_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
index 8b6ae3a32a98c24408290789317ab3c792896dc7..993e14ef4b27e3b37dec07c7b708ccd6ac9ed7e5 100644 (file)
@@ -6,86 +6,15 @@
 #ifndef FILE_boost_type_traits_floating_point_promotion_hpp_INCLUDED
 #define FILE_boost_type_traits_floating_point_promotion_hpp_INCLUDED
 
-#include <boost/config.hpp>
-
-#ifdef BOOST_NO_CV_SPECIALIZATIONS
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/multiplies.hpp>
-#include <boost/mpl/plus.hpp>
-#include <boost/mpl/vector.hpp>
-#include <boost/type_traits/is_same.hpp>
-#endif
-
-// Should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
-namespace type_traits { namespace detail {
-
-#ifndef BOOST_NO_CV_SPECIALIZATIONS
-
-template<class T>
-struct floating_point_promotion
-{
-    typedef T type;
-};
-
-template<>
-struct floating_point_promotion<float>
-{
-    typedef double type;
-};
-
-template<>
-struct floating_point_promotion<float const>
-{
-    typedef double const type;
-};
+   template<class T> struct floating_point_promotion { typedef T type; };
+   template<> struct floating_point_promotion<float> { typedef double type; };
+   template<> struct floating_point_promotion<float const> { typedef double const type; };
+   template<> struct floating_point_promotion<float volatile>{ typedef double volatile type; };
+   template<> struct floating_point_promotion<float const volatile> { typedef double const volatile type; };
 
-template<>
-struct floating_point_promotion<float volatile>
-{
-    typedef double volatile type;
-};
-
-template<>
-struct floating_point_promotion<float const volatile>
-{
-    typedef double const volatile type;
-};
-
-#else
-
-template<class T>
-struct floating_point_promotion
-  : mpl::at<
-        mpl::vector< T, double, double const, double volatile,
-                     double const volatile >
-      , mpl::plus<
-            is_same<T, float>
-          , mpl::multiplies< is_same<T, float const>         , mpl::int_<2> >
-          , mpl::multiplies< is_same<T, float volatile>      , mpl::int_<3> >
-          , mpl::multiplies< is_same<T, float const volatile>, mpl::int_<4> >
-          >
-      >
-{
-};
-
-#endif
-
-} }
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(
-      floating_point_promotion
-    , T
-    , BOOST_DEDUCED_TYPENAME
-        boost::type_traits::detail::floating_point_promotion<T>::type
-    )
 }
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // #ifndef FILE_boost_type_traits_floating_point_promotion_hpp_INCLUDED
 
index ee3307f8da688089048da708a1e261933605e10c..a16c71a48db8c7e8b6a6f5c8f19c568b6d6e5260 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_bit_and
 #define BOOST_TT_TRAIT_OP &
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-         >::value\
-      >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         \
+            (!  ::boost::is_integral< Lhs_noref >::value ) || \
+            (!  ::boost::is_integral< Rhs_noref >::value )\
+          )\
+      )||\
       /* Lhs==fundamental and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Rhs==fundamental and Lhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_pointer< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 5b3112a5bd51275e2e49e57e9dd0b673b0370290..01e25e318f06502c4d53af2c94b6e6e7b6e26d68 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_bit_and_assign
 #define BOOST_TT_TRAIT_OP &=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-         >::value\
-      >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         (\
+            (!  ::boost::is_integral< Lhs_noref >::value ) || \
+            (!  ::boost::is_integral< Rhs_noref >::value )\
+          )\
+      )||\
       /* Lhs==fundamental and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Rhs==fundamental and Lhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_pointer< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==fundamental and Rhs==fundamental and Lhs==const */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_const< Lhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 922b4ce9666604ad57f371ac78794771fac53648..6e76929fdaaaa8b29acb07dec4a693dd0c009107 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_bit_or
 #define BOOST_TT_TRAIT_OP |
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-         >::value\
-      >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         \
+            (!  ::boost::is_integral< Lhs_noref >::value ) || \
+            (!  ::boost::is_integral< Rhs_noref >::value )\
+          )\
+      )||\
       /* Lhs==fundamental and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Rhs==fundamental and Lhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_pointer< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 5481b924537aadb031ced4785428505b769588bc..891c39c51b80339e127222e3a887287fc2704dd0 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_bit_or_assign
 #define BOOST_TT_TRAIT_OP |=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-         >::value\
-      >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         \
+            (!  ::boost::is_integral< Lhs_noref >::value ) || \
+            (!  ::boost::is_integral< Rhs_noref >::value )\
+          )\
+      )||\
       /* Lhs==fundamental and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Rhs==fundamental and Lhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_pointer< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==fundamental and Rhs==fundamental and Lhs==const */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_const< Lhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 883dcf691c57b184b96e783ffcc192244c4d6f14..05173ac11d3769d0d817f72f8861f914ae2400af 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_bit_xor
 #define BOOST_TT_TRAIT_OP ^
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-         >::value\
-      >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         \
+            (!  ::boost::is_integral< Lhs_noref >::value ) || \
+            (!  ::boost::is_integral< Rhs_noref >::value )\
+         )\
+      )||\
       /* Lhs==fundamental and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Rhs==fundamental and Lhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_pointer< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index e2767cc8c6bd664ea62d10033d13e22371d65370..3866b7ac482b9ad4c4cbb6b890433712d5f2f29f 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_bit_xor_assign
 #define BOOST_TT_TRAIT_OP ^=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-         >::value\
-      >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         \
+            (!  ::boost::is_integral< Lhs_noref >::value ) || \
+            (!  ::boost::is_integral< Rhs_noref >::value )\
+          )\
+      )||\
       /* Lhs==fundamental and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Rhs==fundamental and Lhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_pointer< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==fundamental and Rhs==fundamental and Lhs==const */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_const< Lhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index dafd9f521525e841d46990798c02fdec1a772086..d323e129368cf8a0d83b503c3d7f9657b2e929a5 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_complement
 #define BOOST_TT_TRAIT_OP ~
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* pointer */\
-      ::boost::is_pointer< Rhs_noref >::value,\
+      ::boost::is_pointer< Rhs_noref >::value || \
       /* fundamental non integral */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_noref >::value,\
-         ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-      >::value\
-   >::value
+      (\
+         ::boost::is_fundamental< Rhs_noref >::value && \
+         (!  ::boost::is_integral< Rhs_noref >::value )\
+      )\
+   )
 
 
 #include <boost/type_traits/detail/has_prefix_operator.hpp>
index fe48e1187831e54df24b02ee92f4c467ae745f7e..1e514cdf411ffa1b2b72f97c336e05c668b029b1 100644 (file)
 #define BOOST_TT_TRAIT_OP *
 #define BOOST_TT_FORBIDDEN_IF\
    /* void* or fundamental */\
-   ::boost::type_traits::ice_or<\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
+   (\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
          ::boost::is_void< Rhs_noptr >::value\
-      >::value,\
+      ) || \
       ::boost::is_fundamental< Rhs_nocv >::value\
-   >::value
+   )
 
 
 #include <boost/type_traits/detail/has_prefix_operator.hpp>
index 277c2da4b6442a19dc4d4270d8b0857a01d2adba..869e907f6a36acc54499038756be94f2e024749e 100644 (file)
 #define BOOST_TT_TRAIT_OP /
 #define BOOST_TT_FORBIDDEN_IF\
    /* pointer with pointer or fundamental */\
-   ::boost::type_traits::ice_or<\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Rhs_nocv >::value,\
+   (\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         \
+            ::boost::is_fundamental< Rhs_nocv >::value || \
             ::boost::is_pointer< Rhs_noref >::value\
-         >::value\
-      >::value,\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Lhs_nocv >::value,\
+         )\
+      )||\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
+         \
+            ::boost::is_fundamental< Lhs_nocv >::value || \
             ::boost::is_pointer< Lhs_noref >::value\
-         >::value\
-      >::value\
-   >::value
+          )\
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index b21a05aff8f149d546091e4943aa274a05095ab4..1a8e3c1e63bac15af9576cbaacea6fa2e9f0b91b 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_divides_assign
 #define BOOST_TT_TRAIT_OP /=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Lhs==const and Rhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_const< Lhs_noref >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_const< Lhs_noref >::value && \
          ::boost::is_fundamental< Rhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Lhs==pointer and (Rhs==fundamental or Rhs==pointer) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         \
+            ::boost::is_fundamental< Rhs_nocv >::value || \
             ::boost::is_pointer< Rhs_noref >::value\
-         >::value\
-      >::value,\
+          )\
+      )||\
       /* Rhs==pointer and (Lhs==fundamental or Lhs==pointer) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
+         \
+            ::boost::is_fundamental< Lhs_nocv >::value || \
             ::boost::is_pointer< Lhs_noref >::value\
-         >::value\
-      >::value\
-   >::value
+          )\
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index c2245c2d2f7baedda205ed43f69d798a1ce4658d..d80a55d8e510b835f0a05d2066c7e9b4eeea9c57 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_equal_to
 #define BOOST_TT_TRAIT_OP ==
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==pointer and Rhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_fundamental< Rhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Rhs==pointer and Lhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
          ::boost::is_fundamental< Lhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Lhs==pointer and Rhs==pointer and Lhs!=base(Rhs) and Rhs!=base(Lhs) and Lhs!=void* and Rhs!=void* */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_not<\
-            ::boost::type_traits::ice_or<\
-               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value,\
-               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value,\
-               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value,\
-               ::boost::is_void< Lhs_noptr >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_pointer< Rhs_noref >::value && \
+         (! \
+            (\
+               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value || \
+               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value || \
+               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value || \
+               ::boost::is_void< Lhs_noptr >::value || \
                ::boost::is_void< Rhs_noptr >::value\
-            >::value\
-         >::value\
-      >::value\
-   >::value
+            )\
+         )\
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index ce3265840504e8fa2b35fbe4d3a4b544cbf9843e..32e0a124040ac86123a55e84242820605132228b 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_greater
 #define BOOST_TT_TRAIT_OP >
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==pointer and Rhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_fundamental< Rhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Rhs==pointer and Lhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
          ::boost::is_fundamental< Lhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Lhs==pointer and Rhs==pointer and Lhs!=base(Rhs) and Rhs!=base(Lhs) and Lhs!=void* and Rhs!=void* */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_not<\
-            ::boost::type_traits::ice_or<\
-               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value,\
-               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value,\
-               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value,\
-               ::boost::is_void< Lhs_noptr >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_pointer< Rhs_noref >::value && \
+         (! \
+            \
+               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value || \
+               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value || \
+               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value || \
+               ::boost::is_void< Lhs_noptr >::value || \
                ::boost::is_void< Rhs_noptr >::value\
-            >::value\
-         >::value\
-      >::value\
-   >::value
+            )\
+         )\
+      )\
+   )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 681685a23dfc81a0d3fd7e839d106e002df3e070..a933a6beb8ff3791f9f4daf6f1e2bc61b75465c6 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_greater_equal
 #define BOOST_TT_TRAIT_OP >=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==pointer and Rhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_fundamental< Rhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Rhs==pointer and Lhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
          ::boost::is_fundamental< Lhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Lhs==pointer and Rhs==pointer and Lhs!=base(Rhs) and Rhs!=base(Lhs) and Lhs!=void* and Rhs!=void* */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_not<\
-            ::boost::type_traits::ice_or<\
-               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value,\
-               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value,\
-               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value,\
-               ::boost::is_void< Lhs_noptr >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_pointer< Rhs_noref >::value && \
+         (! \
+            \
+               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value || \
+               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value || \
+               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value || \
+               ::boost::is_void< Lhs_noptr >::value || \
                ::boost::is_void< Rhs_noptr >::value\
-            >::value\
-         >::value\
-      >::value\
-   >::value
+            )\
+         )\
+      )\
+   )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 88205d99398c08ff0c2bec466f5e7be3addd71af..e95c12a80a641dce2162b0f7783ce3e4a6170110 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_left_shift
 #define BOOST_TT_TRAIT_OP <<
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-         >::value\
-      >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         \
+            (!  ::boost::is_integral< Lhs_noref >::value ) || \
+            (!  ::boost::is_integral< Rhs_noref >::value )\
+         )\
+      )||\
       /* Lhs==fundamental and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Rhs==fundamental and Lhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_pointer< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 0b3b9b1f9b884bebd6d6ca9151bdf697aaff57f0..74e0df95806611680fdeab0299077f829502a317 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_left_shift_assign
 #define BOOST_TT_TRAIT_OP <<=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-         >::value\
-      >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         \
+            (!  ::boost::is_integral< Lhs_noref >::value ) || \
+            (!  ::boost::is_integral< Rhs_noref >::value )\
+         )\
+      )||\
       /* Lhs==fundamental and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Rhs==fundamental and Lhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_pointer< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==fundamental and Rhs==fundamental and Lhs==const */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_const< Lhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index e1a045e592d7a049677c44fcc30b77a04ab372f2..0eefcd22ddcc4973234b12cacf82d97b7040eeb5 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_less
 #define BOOST_TT_TRAIT_OP <
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==pointer and Rhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_fundamental< Rhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Rhs==pointer and Lhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
          ::boost::is_fundamental< Lhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Lhs==pointer and Rhs==pointer and Lhs!=base(Rhs) and Rhs!=base(Lhs) and Lhs!=void* and Rhs!=void* */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_not<\
-            ::boost::type_traits::ice_or<\
-               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value,\
-               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value,\
-               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value,\
-               ::boost::is_void< Lhs_noptr >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_pointer< Rhs_noref >::value && \
+         (! \
+            \
+               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value || \
+               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value || \
+               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value || \
+               ::boost::is_void< Lhs_noptr >::value || \
                ::boost::is_void< Rhs_noptr >::value\
-            >::value\
-         >::value\
-      >::value\
-   >::value
+            )\
+         )\
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index c633b8b81d6931c292cee20772766f15bd124c16..4725bbd421b6609e69535b7183eaaf6ac86b8ee7 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_less_equal
 #define BOOST_TT_TRAIT_OP <=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==pointer and Rhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_fundamental< Rhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Rhs==pointer and Lhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
          ::boost::is_fundamental< Lhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Lhs==pointer and Rhs==pointer and Lhs!=base(Rhs) and Rhs!=base(Lhs) and Lhs!=void* and Rhs!=void* */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_not<\
-            ::boost::type_traits::ice_or<\
-               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value,\
-               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value,\
-               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value,\
-               ::boost::is_void< Lhs_noptr >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_pointer< Rhs_noref >::value && \
+         (! \
+            \
+               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value || \
+               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value || \
+               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value || \
+               ::boost::is_void< Lhs_noptr >::value || \
                ::boost::is_void< Rhs_noptr >::value\
-            >::value\
-         >::value\
-      >::value\
-   >::value
+            )\
+         )\
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 5bfa1c334ddb55e57af455d1e9d192917848d5d6..3bb1733d54ec8cdc42cd5dff105d96dda3a57383 100644 (file)
 #define BOOST_TT_TRAIT_OP &&
 #define BOOST_TT_FORBIDDEN_IF\
    /* pointer with fundamental non convertible to bool */\
-   ::boost::type_traits::ice_or<\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::type_traits::ice_and<\
-            ::boost::is_fundamental< Rhs_nocv >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_convertible< Rhs_nocv, bool >::value >::value\
-         >::value\
-      >::value,\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_and<\
-            ::boost::is_fundamental< Lhs_nocv >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_convertible< Lhs_nocv, bool >::value >::value\
-         >::value\
-      >::value\
-   >::value
+   (\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         \
+            ::boost::is_fundamental< Rhs_nocv >::value && \
+            (!  ::boost::is_convertible< Rhs_nocv, bool >::value )\
+          )\
+      )||\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
+         \
+            ::boost::is_fundamental< Lhs_nocv >::value && \
+            (!  ::boost::is_convertible< Lhs_nocv, bool >::value )\
+         )\
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index a4ae6c5f47682d5843f02de4bc58ad6cddbf8370..a188726e152ce640d1091dbc5bcbe08f9533c5b6 100644 (file)
 #define BOOST_TT_TRAIT_OP ||
 #define BOOST_TT_FORBIDDEN_IF\
    /* pointer with fundamental non convertible to bool */\
-   ::boost::type_traits::ice_or<\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::type_traits::ice_and<\
-            ::boost::is_fundamental< Rhs_nocv >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_convertible< Rhs_nocv, bool >::value >::value\
-         >::value\
-      >::value,\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_and<\
-            ::boost::is_fundamental< Lhs_nocv >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_convertible< Lhs_nocv, bool >::value >::value\
-         >::value\
-      >::value\
-   >::value
+   (\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         (\
+            ::boost::is_fundamental< Rhs_nocv >::value && \
+            (!  ::boost::is_convertible< Rhs_nocv, bool >::value )\
+          )\
+      )||\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
+         (\
+            ::boost::is_fundamental< Lhs_nocv >::value && \
+            (!  ::boost::is_convertible< Lhs_nocv, bool >::value )\
+          )\
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index cc1d06b5c3e8ad28738126983c5444bfec1d47eb..5e13c16014a99f4f4b9828aba2dfbb3de4c295df 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_minus
 #define BOOST_TT_TRAIT_OP -
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-      >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         (!  ::boost::is_integral< Rhs_noref >::value )\
+      ) || \
       /* Lhs==void* and (Rhs==fundamental or Rhs==pointer) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_void< Lhs_noptr >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_void< Lhs_noptr >::value && \
+         \
+            ::boost::is_fundamental< Rhs_nocv >::value || \
             ::boost::is_pointer< Rhs_noref >::value\
-         >::value\
-      >::value,\
+          )\
+      ) || \
       /* Rhs==void* and (Lhs==fundamental or Lhs==pointer) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::is_void< Rhs_noptr >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
+         ::boost::is_void< Rhs_noptr >::value && \
+         (\
+            ::boost::is_fundamental< Lhs_nocv >::value || \
             ::boost::is_pointer< Lhs_noref >::value\
-         >::value\
-      >::value,\
+          )\
+      ) ||\
       /* Lhs=fundamental and Rhs=pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      ) ||\
       /* two different pointers */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_not< ::boost::is_same< Lhs_nocv, Rhs_nocv >::value >::value\
-      >::value\
-   >::value
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_pointer< Rhs_noref >::value && \
+         (!  ::boost::is_same< Lhs_nocv, Rhs_nocv >::value )\
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 84ba3594d68aa715113602a8af38918c8135fb0a..b53474e756ed1393e120b4c53b483f6c4ee5eb99 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_minus_assign
 #define BOOST_TT_TRAIT_OP -=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-      >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         (!  ::boost::is_integral< Rhs_noref >::value )\
+      ) || \
       /* Lhs==void* and Rhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_void< Lhs_noptr >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_void< Lhs_noptr >::value && \
          ::boost::is_fundamental< Rhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Rhs==void* and Lhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::is_void< Rhs_noptr >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
+         ::boost::is_void< Rhs_noptr >::value && \
          ::boost::is_fundamental< Lhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Lhs=fundamental and Rhs=pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      ) || \
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      ) || \
       /* (Lhs==fundamental or Lhs==pointer) and (Rhs==fundamental or Rhs==pointer) and (Lhs==const) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         (\
+            ::boost::is_fundamental< Lhs_nocv >::value || \
             ::boost::is_pointer< Lhs_noref >::value\
-         >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Rhs_nocv >::value,\
+         ) && \
+         (\
+            ::boost::is_fundamental< Rhs_nocv >::value || \
             ::boost::is_pointer< Rhs_noref >::value\
-         >::value,\
+          ) && \
          ::boost::is_const< Lhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 694872805859467d27a89a165b74ae2955ed70bf..24a815f3df28f59b203b7115bd5f689e801986f4 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_modulus
 #define BOOST_TT_TRAIT_OP %
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-         >::value\
-      >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         (\
+            (!  ::boost::is_integral< Lhs_noref >::value ) || \
+            (!  ::boost::is_integral< Rhs_noref >::value )\
+         )\
+      )||\
       /* Lhs==fundamental and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Rhs==fundamental and Lhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_pointer< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index f0531f0747462dc9aedbc0f045e6469eba0c4a9b..5e3e83fa07694a8e7659437ed30764e2e7bef0e4 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_modulus_assign
 #define BOOST_TT_TRAIT_OP %=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-         >::value\
-      >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         \
+            (!  ::boost::is_integral< Lhs_noref >::value ) || \
+            (!  ::boost::is_integral< Rhs_noref >::value )\
+         )\
+      )||\
       /* Lhs==fundamental and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Rhs==fundamental and Lhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_pointer< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==fundamental and Rhs==fundamental and Lhs==const */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_const< Lhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 4b578c5d78e0a31b99f70547579fb61bb6117009..591a0ceae8290c5ec3a3a4b5704cd5922aa09e49 100644 (file)
 #define BOOST_TT_TRAIT_OP *
 #define BOOST_TT_FORBIDDEN_IF\
    /* pointer with pointer or fundamental */\
-   ::boost::type_traits::ice_or<\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Rhs_nocv >::value,\
+   (\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         (\
+            ::boost::is_fundamental< Rhs_nocv >::value || \
             ::boost::is_pointer< Rhs_noref >::value\
-         >::value\
-      >::value,\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Lhs_nocv >::value,\
+        )\
+      )||\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
+         (\
+            ::boost::is_fundamental< Lhs_nocv >::value || \
             ::boost::is_pointer< Lhs_noref >::value\
-         >::value\
-      >::value\
-   >::value
+          )\
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 1678b7bda59545537cbb0483d7ef38350c5659fb..b24f87944e7a51821d5f2f866b197d692b605be3 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_multiplies_assign
 #define BOOST_TT_TRAIT_OP *=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Lhs==const and Rhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_const< Lhs_noref >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_const< Lhs_noref >::value && \
          ::boost::is_fundamental< Rhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Lhs==pointer and (Rhs==fundamental or Rhs==pointer) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         \
+            ::boost::is_fundamental< Rhs_nocv >::value || \
             ::boost::is_pointer< Rhs_noref >::value\
-         >::value\
-      >::value,\
+         )\
+      )||\
       /* Rhs==pointer and (Lhs==fundamental or Lhs==pointer) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
+         \
+            ::boost::is_fundamental< Lhs_nocv >::value || \
             ::boost::is_pointer< Lhs_noref >::value\
-         >::value\
-      >::value\
-   >::value
+          )\
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index c615127da3435770a8ebf145d98161fabfb120c6..4def872ddf8a0b2f1ee06c8c6a182a0937a14994 100644 (file)
 
 #include <new> // std::nothrow_t
 #include <cstddef> // std::size_t
-#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 #include <boost/type_traits/detail/yes_no_type.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/detail/workaround.hpp>
 
 #if defined(new) 
 #  if BOOST_WORKAROUND(BOOST_MSVC, >= 1310)
@@ -129,19 +126,17 @@ namespace detail {
             #endif
         #endif
         BOOST_STATIC_CONSTANT(bool, value = 
-           (::boost::type_traits::ice_or<
-            (s1 == sizeof(type_traits::yes_type)),
-            (s2 == sizeof(type_traits::yes_type)),
-            (s3 == sizeof(type_traits::yes_type)),
-            (s4 == sizeof(type_traits::yes_type)),
-            (s5 == sizeof(type_traits::yes_type)),
+            (s1 == sizeof(type_traits::yes_type)) ||
+            (s2 == sizeof(type_traits::yes_type)) ||
+            (s3 == sizeof(type_traits::yes_type)) ||
+            (s4 == sizeof(type_traits::yes_type)) ||
+            (s5 == sizeof(type_traits::yes_type)) ||
             (s6 == sizeof(type_traits::yes_type))
-           >::value)
         );
     };
 } // namespace detail
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_new_operator,T,::boost::detail::has_new_operator_impl<T>::value)
+template <class T> struct has_new_operator : public integral_constant<bool, ::boost::detail::has_new_operator_impl<T>::value>{};
 
 } // namespace boost
 
@@ -149,6 +144,4 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_new_operator,T,::boost::detail::has_new_operato
 #  pragma pop_macro("new")
 #endif
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_HAS_NEW_OPERATOR_HPP_INCLUDED
index e7e370013dcffa35497da2cad57f950f31542320..c2b6705e7c9718701e8d5c6bce9ecdcb95daad02 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_not_equal_to
 #define BOOST_TT_TRAIT_OP !=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==pointer and Rhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_fundamental< Rhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Rhs==pointer and Lhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
          ::boost::is_fundamental< Lhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Lhs==pointer and Rhs==pointer and Lhs!=base(Rhs) and Rhs!=base(Lhs) and Lhs!=void* and Rhs!=void* */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::type_traits::ice_not<\
-            ::boost::type_traits::ice_or<\
-               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value,\
-               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value,\
-               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value,\
-               ::boost::is_void< Lhs_noptr >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_pointer< Rhs_noref >::value && \
+         (! \
+            (\
+               ::boost::is_base_of< Lhs_noptr, Rhs_noptr >::value || \
+               ::boost::is_base_of< Rhs_noptr, Lhs_noptr >::value || \
+               ::boost::is_same< Lhs_noptr, Rhs_noptr >::value || \
+               ::boost::is_void< Lhs_noptr >::value || \
                ::boost::is_void< Rhs_noptr >::value\
-            >::value\
-         >::value\
-      >::value\
-   >::value
+            )\
+         )\
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 83e59687a0b5118a0a306106e0dddb7d8c8a0147..a7312a19e93409f08ebd188be99ee0f442c3b975 100644 (file)
@@ -9,36 +9,75 @@
 #ifndef BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED
 #define BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED
 
-#include <boost/type_traits/has_trivial_assign.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/intrinsics.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#if !defined(BOOST_HAS_NOTHROW_ASSIGN) || defined(BOOST_MSVC) || defined(BOOST_INTEL)
+#include <boost/type_traits/has_trivial_assign.hpp>
+#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#include <boost/type_traits/declval.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_assignable.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#endif
+#endif
+#if defined(__GNUC__) || defined(__SUNPRO_CC)
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/is_assignable.hpp>
+#include <boost/type_traits/is_array.hpp>
+#ifdef BOOST_INTEL
+#include <boost/type_traits/is_pod.hpp>
+#endif
+#endif
 
 namespace boost {
 
-namespace detail{
+#if !defined(BOOST_HAS_NOTHROW_ASSIGN) && !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+   namespace detail
+   {
+      template <class T, bool b1, bool b2> struct has_nothrow_assign_imp{ static const bool value = false; };
+      template <class T>          struct has_nothrow_assign_imp<T, false, true>{ static const bool value = noexcept(boost::declval<typename add_reference<T>::type>() = boost::declval<typename add_reference<T const>::type>()); };
+      template <class T, std::size_t N> struct has_nothrow_assign_imp<T[N], false, true>{ static const bool value = has_nothrow_assign_imp<T, false, true>::value; };
+      template <class T>          struct has_nothrow_assign_imp<T[], false, true>{ static const bool value = has_nothrow_assign_imp<T, false, true>::value; };
+   }
 
-template <class T>
-struct has_nothrow_assign_imp{
+#endif
+
+   template <class T>
+   struct has_nothrow_assign : public integral_constant < bool,
 #ifndef BOOST_HAS_NOTHROW_ASSIGN
-   BOOST_STATIC_CONSTANT(bool, value = ::boost::has_trivial_assign<T>::value);
+#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+      // Portable C++11 version:
+      detail::has_nothrow_assign_imp<T, 
+      (is_const<typename remove_reference<T>::type>::value || is_volatile<typename remove_reference<T>::type>::value || is_reference<T>::value), 
+      is_assignable<typename add_reference<T>::type, typename add_reference<const T>::type>::value
+      >::value
 #else
-   BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_ASSIGN(T));
+      ::boost::has_trivial_assign<T>::value
 #endif
-};
-
-}
+#else
+      BOOST_HAS_NOTHROW_ASSIGN(T)
+#endif
+   > {};
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_assign,T,::boost::detail::has_nothrow_assign_imp<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_assign,void,false)
+template <class T, std::size_t N> struct has_nothrow_assign <T[N]> : public has_nothrow_assign<T> {};
+template <> struct has_nothrow_assign<void> : public false_type{};
+template <class T> struct has_nothrow_assign<T volatile> : public false_type{};
+template <class T> struct has_nothrow_assign<T&> : public false_type{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+template <class T> struct has_nothrow_assign<T&&> : public false_type{};
+#endif
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_assign,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_assign,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_assign,void volatile,false)
+template <> struct has_nothrow_assign<void const> : public false_type{};
+template <> struct has_nothrow_assign<void const volatile> : public false_type{};
+template <> struct has_nothrow_assign<void volatile> : public false_type{};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED
index 3bc4f802c20040f9a37e953dd74c9483c9bc8a04..e5af89fe593a6520e3200ecbeaca1110f192e6c0 100644 (file)
@@ -9,45 +9,64 @@
 #ifndef BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED
 #define BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED
 
-#include <boost/type_traits/has_trivial_constructor.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#ifdef BOOST_HAS_NOTHROW_CONSTRUCTOR
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#if defined(BOOST_MSVC) || defined(BOOST_INTEL)
+#include <boost/type_traits/has_trivial_constructor.hpp>
+#endif
+#if defined(__GNUC__ ) || defined(__SUNPRO_CC)
+#include <boost/type_traits/is_default_constructible.hpp>
+#endif
 
 namespace boost {
 
-namespace detail{
+template <class T> struct has_nothrow_constructor : public integral_constant<bool, BOOST_HAS_NOTHROW_CONSTRUCTOR(T)>{};
 
-template <class T>
-struct has_nothrow_constructor_imp{
-#ifdef BOOST_HAS_NOTHROW_CONSTRUCTOR
-   BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_CONSTRUCTOR(T));
-#else
-   BOOST_STATIC_CONSTANT(bool, value = ::boost::has_trivial_constructor<T>::value);
+#elif !defined(BOOST_NO_CXX11_NOEXCEPT)
+
+#include <boost/type_traits/is_default_constructible.hpp>
+#include <boost/type_traits/remove_all_extents.hpp>
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4197) // top-level volatile in cast is ignored
 #endif
-};
 
+namespace boost { namespace detail{
+
+   template <class T, bool b> struct has_nothrow_constructor_imp : public boost::integral_constant<bool, false>{};
+   template <class T> struct has_nothrow_constructor_imp<T, true> : public boost::integral_constant<bool, noexcept(T())>{};
+   template <class T, std::size_t N> struct has_nothrow_constructor_imp<T[N], true> : public has_nothrow_constructor_imp<T, true> {};
 }
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_constructor,T,::boost::detail::has_nothrow_constructor_imp<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_default_constructor,T,::boost::detail::has_nothrow_constructor_imp<T>::value)
+template <class T> struct has_nothrow_constructor : public detail::has_nothrow_constructor_imp<T, is_default_constructible<T>::value>{};
 
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void,false)
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void volatile,false)
+#ifdef BOOST_MSVC
+#pragma warning(pop)
 #endif
 
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void,false)
+#else
+
+#include <boost/type_traits/has_trivial_constructor.hpp>
+
+namespace boost {
+
+template <class T> struct has_nothrow_constructor : public ::boost::has_trivial_constructor<T> {};
+
+#endif
+
+template<> struct has_nothrow_constructor<void> : public false_type {};
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void volatile,false)
+template<> struct has_nothrow_constructor<void const> : public false_type{};
+template<> struct has_nothrow_constructor<void const volatile> : public false_type{};
+template<> struct has_nothrow_constructor<void volatile> : public false_type{};
 #endif
 
-} // namespace boost
+template <class T> struct has_nothrow_default_constructor : public has_nothrow_constructor<T>{};
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
+} // namespace boost
 
 #endif // BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED
index 9c3c9030a40dcbda75ff323b98b1acefda78b458..0d9bb1837902615763b41fed5fe00b5f210c49b0 100644 (file)
@@ -9,45 +9,74 @@
 #ifndef BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED
 #define BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED
 
-#include <boost/type_traits/has_trivial_copy.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#ifdef BOOST_HAS_NOTHROW_COPY
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#if defined(BOOST_CLANG) || defined(__GNUC__) || defined(__ghs__) || defined(__CODEGEARC__) || defined(__SUNPRO_CC)
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/is_copy_constructible.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_array.hpp>
+#ifdef BOOST_INTEL
+#include <boost/type_traits/is_pod.hpp>
+#endif
+#elif defined(BOOST_MSVC) || defined(BOOST_INTEL)
+#include <boost/type_traits/has_trivial_copy.hpp>
+#include <boost/type_traits/is_array.hpp>
+#ifdef BOOST_INTEL
+#include <boost/type_traits/add_lvalue_reference.hpp>
+#include <boost/type_traits/add_const.hpp>
+#endif
+#endif
 
 namespace boost {
 
+template <class T> struct has_nothrow_copy_constructor : public integral_constant<bool, BOOST_HAS_NOTHROW_COPY(T)>{};
+
+#elif !defined(BOOST_NO_CXX11_NOEXCEPT)
+
+#include <boost/type_traits/declval.hpp>
+#include <boost/type_traits/is_copy_constructible.hpp>
+
+namespace boost{
+
 namespace detail{
 
+template <class T, bool b>
+struct has_nothrow_copy_constructor_imp : public boost::integral_constant<bool, false>{};
 template <class T>
-struct has_nothrow_copy_imp{
-#ifdef BOOST_HAS_NOTHROW_COPY
-   BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_COPY(T));
-#else
-   BOOST_STATIC_CONSTANT(bool, value = ::boost::has_trivial_copy<T>::value);
-#endif
-};
+struct has_nothrow_copy_constructor_imp<T, true> : public boost::integral_constant<bool, noexcept(T(boost::declval<const T&>()))>{};
 
 }
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_copy,T,::boost::detail::has_nothrow_copy_imp<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_copy_constructor,T,::boost::detail::has_nothrow_copy_imp<T>::value)
+template <class T> struct has_nothrow_copy_constructor : public detail::has_nothrow_copy_constructor_imp<T, boost::is_copy_constructible<T>::value>{};
+
+#else
+
+#include <boost/type_traits/has_trivial_copy.hpp>
+
+namespace boost{
+
+template <class T> struct has_nothrow_copy_constructor : public integral_constant<bool, ::boost::has_trivial_copy<T>::value>{};
 
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void,false)
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void volatile,false)
 #endif
 
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void,false)
+template <> struct has_nothrow_copy_constructor<void> : public false_type{};
+template <class T> struct has_nothrow_copy_constructor<T volatile> : public false_type{};
+template <class T> struct has_nothrow_copy_constructor<T&> : public false_type{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) 
+template <class T> struct has_nothrow_copy_constructor<T&&> : public false_type{};
+#endif
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void volatile,false)
+template <> struct has_nothrow_copy_constructor<void const> : public false_type{};
+template <> struct has_nothrow_copy_constructor<void volatile> : public false_type{};
+template <> struct has_nothrow_copy_constructor<void const volatile> : public false_type{};
 #endif
 
-} // namespace boost
+template <class T> struct has_nothrow_copy : public has_nothrow_copy_constructor<T>{};
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
+} // namespace boost
 
 #endif // BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED
index 4f5882afc00a4e7152e32b4b38b477384a24a87a..273eb9f1986677df9adeaa005b02873ae8da453f 100644 (file)
 
 #include <boost/type_traits/has_trivial_destructor.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(__SUNPRO_CC) && !defined(BOOST_MSVC)
+
+#include <boost/type_traits/declval.hpp>
+#include <boost/type_traits/is_destructible.hpp>
+
+namespace boost{
+
+   namespace detail{
+
+      template <class T, bool b>
+      struct has_nothrow_destructor_imp : public boost::integral_constant<bool, false>{};
+      template <class T>
+      struct has_nothrow_destructor_imp<T, true> : public boost::integral_constant<bool, noexcept(boost::declval<T*&>()->~T())>{};
+
+   }
+
+   template <class T> struct has_nothrow_destructor : public detail::has_nothrow_destructor_imp<T, boost::is_destructible<T>::value>{};
+   template <class T, std::size_t N> struct has_nothrow_destructor<T[N]> : public has_nothrow_destructor<T>{};
+   template <class T> struct has_nothrow_destructor<T&> : public integral_constant<bool, false>{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) 
+   template <class T> struct has_nothrow_destructor<T&&> : public integral_constant<bool, false>{};
+#endif
+}
+#else
 
 namespace boost {
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_destructor,T,::boost::has_trivial_destructor<T>::value)
+template <class T> struct has_nothrow_destructor : public ::boost::has_trivial_destructor<T> {};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
+#endif
 
 #endif // BOOST_TT_HAS_NOTHROW_DESTRUCTOR_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/has_operator.hpp b/3rdparty/boost/boost/type_traits/has_operator.hpp
deleted file mode 100644 (file)
index c97a90f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-//  (C) Copyright 2009-2011 Frederic Bron.
-//
-//  Use, modification and distribution are subject to the Boost Software License,
-//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-//  http://www.boost.org/LICENSE_1_0.txt).
-//
-//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
-
-#ifndef BOOST_TT_HAS_OPERATOR_HPP_INCLUDED
-#define BOOST_TT_HAS_OPERATOR_HPP_INCLUDED
-
-#include <boost/type_traits/has_bit_and.hpp>
-#include <boost/type_traits/has_bit_and_assign.hpp>
-#include <boost/type_traits/has_bit_or.hpp>
-#include <boost/type_traits/has_bit_or_assign.hpp>
-#include <boost/type_traits/has_bit_xor.hpp>
-#include <boost/type_traits/has_bit_xor_assign.hpp>
-#include <boost/type_traits/has_complement.hpp>
-#include <boost/type_traits/has_dereference.hpp>
-#include <boost/type_traits/has_divides.hpp>
-#include <boost/type_traits/has_divides_assign.hpp>
-#include <boost/type_traits/has_equal_to.hpp>
-#include <boost/type_traits/has_greater.hpp>
-#include <boost/type_traits/has_greater_equal.hpp>
-#include <boost/type_traits/has_left_shift.hpp>
-#include <boost/type_traits/has_left_shift_assign.hpp>
-#include <boost/type_traits/has_less.hpp>
-#include <boost/type_traits/has_less_equal.hpp>
-#include <boost/type_traits/has_logical_and.hpp>
-#include <boost/type_traits/has_logical_not.hpp>
-#include <boost/type_traits/has_logical_or.hpp>
-#include <boost/type_traits/has_minus.hpp>
-#include <boost/type_traits/has_minus_assign.hpp>
-#include <boost/type_traits/has_modulus.hpp>
-#include <boost/type_traits/has_modulus_assign.hpp>
-#include <boost/type_traits/has_multiplies.hpp>
-#include <boost/type_traits/has_multiplies_assign.hpp>
-#include <boost/type_traits/has_negate.hpp>
-#include <boost/type_traits/has_not_equal_to.hpp>
-#include <boost/type_traits/has_plus.hpp>
-#include <boost/type_traits/has_plus_assign.hpp>
-#include <boost/type_traits/has_post_decrement.hpp>
-#include <boost/type_traits/has_post_increment.hpp>
-#include <boost/type_traits/has_pre_decrement.hpp>
-#include <boost/type_traits/has_pre_increment.hpp>
-#include <boost/type_traits/has_right_shift.hpp>
-#include <boost/type_traits/has_right_shift_assign.hpp>
-#include <boost/type_traits/has_unary_minus.hpp>
-#include <boost/type_traits/has_unary_plus.hpp>
-
-#endif
index 70c12008f4772a6ff8a5e069f5907e378cb35139..2d7932884d2ecd2c0a09c6d731adf47d020c2672 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_plus
 #define BOOST_TT_TRAIT_OP +
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      ) || \
       /* Lhs==void* and Rhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_void< Lhs_noptr >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_void< Lhs_noptr >::value && \
          ::boost::is_fundamental< Rhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Rhs==void* and Lhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::is_void< Rhs_noptr >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
+         ::boost::is_void< Rhs_noptr >::value && \
          ::boost::is_fundamental< Lhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-      >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         (!  ::boost::is_integral< Rhs_noref >::value )\
+      ) || \
       /* Rhs==pointer and Lhs==fundamental and Lhs!=integral */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value\
-      >::value\
-   >::value
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         (!  ::boost::is_integral< Lhs_noref >::value )\
+      )\
+   )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 6d65204dcf67de89a279d98063ef64d5e792e69b..5ef6f2328923b03d48406cc53f64d457e7b20f88 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_plus_assign
 #define BOOST_TT_TRAIT_OP +=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      ) || \
       /* Lhs==void* and Rhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_void< Lhs_noptr >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_void< Lhs_noptr >::value && \
          ::boost::is_fundamental< Rhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Rhs==void* and Lhs==fundamental */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::is_void< Rhs_noptr >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
+         ::boost::is_void< Rhs_noptr >::value && \
          ::boost::is_fundamental< Lhs_nocv >::value\
-      >::value,\
+      ) || \
       /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-      >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         (!  ::boost::is_integral< Rhs_noref >::value )\
+      ) || \
       /* Rhs==pointer and Lhs==fundamental and Lhs!=bool */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::type_traits::ice_not< ::boost::is_same< Lhs_nocv, bool >::value >::value\
-      >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         (!  ::boost::is_same< Lhs_nocv, bool >::value )\
+      ) || \
       /* (Lhs==fundamental or Lhs==pointer) and (Rhs==fundamental or Rhs==pointer) and (Lhs==const) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         (\
+            ::boost::is_fundamental< Lhs_nocv >::value || \
             ::boost::is_pointer< Lhs_noref >::value\
-         >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Rhs_nocv >::value,\
+          ) && \
+         \
+            ::boost::is_fundamental< Rhs_nocv >::value || \
             ::boost::is_pointer< Rhs_noref >::value\
-         >::value,\
+          ) && \
          ::boost::is_const< Lhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 024acb06e29736c7d6c9b5b6404f7d479d50ee87..e3f98fff1cb913948860e84ab3420451802dde45 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_post_decrement
 #define BOOST_TT_TRAIT_OP --
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* bool */\
-      ::boost::is_same< bool, Lhs_nocv >::value,\
+      ::boost::is_same< bool, Lhs_nocv >::value || \
       /* void* */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_void< Lhs_noptr >::value\
-      >::value,\
+      ) || \
       /* (fundamental or pointer) and const */\
-      ::boost::type_traits::ice_and<\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         \
+            ::boost::is_fundamental< Lhs_nocv >::value || \
             ::boost::is_pointer< Lhs_noref >::value\
-         >::value,\
+         ) && \
          ::boost::is_const< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Arrays */ \
       ::boost::is_array<Lhs_noref>::value\
-   >::value
+      )
 
 
 #include <boost/type_traits/detail/has_postfix_operator.hpp>
index b055607d527580aa0181b1affb5c76efff57b8c8..3861a2bbde25ebe71013e31db130cc3cf68b570c 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_post_increment
 #define BOOST_TT_TRAIT_OP ++
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* bool */\
-      ::boost::is_same< bool, Lhs_nocv >::value,\
+      ::boost::is_same< bool, Lhs_nocv >::value || \
       /* void* */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_void< Lhs_noptr >::value\
-      >::value,\
+      ) || \
       /* (fundamental or pointer) and const */\
-      ::boost::type_traits::ice_and<\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         \
+            ::boost::is_fundamental< Lhs_nocv >::value || \
             ::boost::is_pointer< Lhs_noref >::value\
-         >::value,\
+         ) && \
          ::boost::is_const< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Arrays */ \
       ::boost::is_array<Lhs_noref>::value\
-   >::value
+      )
 
 
 #include <boost/type_traits/detail/has_postfix_operator.hpp>
index feb3d9d2e6ff1f100e2067d19635e0de7c81eb07..7ef078329b25e9b899cc42c9630cc4d61ea68258 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_pre_decrement
 #define BOOST_TT_TRAIT_OP --
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* bool */\
-      ::boost::is_same< bool, Rhs_nocv >::value,\
+      ::boost::is_same< bool, Rhs_nocv >::value || \
       /* void* */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
          ::boost::is_void< Rhs_noptr >::value\
-      >::value,\
+      ) || \
       /* (fundamental or pointer) and const */\
-      ::boost::type_traits::ice_and<\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         \
+            ::boost::is_fundamental< Rhs_nocv >::value || \
             ::boost::is_pointer< Rhs_noref >::value\
-         >::value,\
+         ) && \
          ::boost::is_const< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Arrays */ \
       ::boost::is_array<Rhs_noref>::value\
-   >::value
+      )
 
 
 #include <boost/type_traits/detail/has_prefix_operator.hpp>
index 6a2411de69cef3a13541209d991b620b23623de0..c4c973487c83e7d318063f22cf13ee361807968d 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_pre_increment
 #define BOOST_TT_TRAIT_OP ++
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* bool */\
-      ::boost::is_same< bool, Rhs_nocv >::value,\
+      ::boost::is_same< bool, Rhs_nocv >::value || \
       /* void* */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Rhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Rhs_noref >::value && \
          ::boost::is_void< Rhs_noptr >::value\
-      >::value,\
+      ) || \
       /* (fundamental or pointer) and const */\
-      ::boost::type_traits::ice_and<\
-         ::boost::type_traits::ice_or<\
-            ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         \
+            ::boost::is_fundamental< Rhs_nocv >::value || \
             ::boost::is_pointer< Rhs_noref >::value\
-         >::value,\
+         ) && \
          ::boost::is_const< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Arrays */ \
       ::boost::is_array<Rhs_noref>::value\
-   >::value
+      )
 
 
 #include <boost/type_traits/detail/has_prefix_operator.hpp>
index 5735870159c4720651b9c89b3fa2d08db90f2ece..556291123329a6025f44f9dcb49ee2ca83011c14 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_right_shift
 #define BOOST_TT_TRAIT_OP >>
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-         >::value\
-      >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         \
+            (!  ::boost::is_integral< Lhs_noref >::value ) || \
+            (!  ::boost::is_integral< Rhs_noref >::value )\
+         )\
+      )||\
       /* Lhs==fundamental and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Rhs==fundamental and Lhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_pointer< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 0536e71b6a20df8bb16a67057ca1024cbb95349a..0e2c263559febf7497349a8ea40b80f99aa28e87 100644 (file)
 #define BOOST_TT_TRAIT_NAME has_right_shift_assign
 #define BOOST_TT_TRAIT_OP >>=
 #define BOOST_TT_FORBIDDEN_IF\
-   ::boost::type_traits::ice_or<\
+   (\
       /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
-         ::boost::type_traits::ice_or<\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value,\
-            ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
-         >::value\
-      >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
+         \
+            (!  ::boost::is_integral< Lhs_noref >::value ) || \
+            (!  ::boost::is_integral< Rhs_noref >::value )\
+         )\
+      )||\
       /* Lhs==fundamental and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Rhs==fundamental and Lhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_pointer< Lhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==pointer and Rhs==pointer */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_pointer< Lhs_noref >::value,\
+      (\
+         ::boost::is_pointer< Lhs_noref >::value && \
          ::boost::is_pointer< Rhs_noref >::value\
-      >::value,\
+      )||\
       /* Lhs==fundamental and Rhs==fundamental and Lhs==const */\
-      ::boost::type_traits::ice_and<\
-         ::boost::is_fundamental< Lhs_nocv >::value,\
-         ::boost::is_fundamental< Rhs_nocv >::value,\
+      (\
+         ::boost::is_fundamental< Lhs_nocv >::value && \
+         ::boost::is_fundamental< Rhs_nocv >::value && \
          ::boost::is_const< Lhs_noref >::value\
-      >::value\
-   >::value
+      )\
+      )
 
 
 #include <boost/type_traits/detail/has_binary_operator.hpp>
index 404b62c70d30ad0f7bf44e7f5fd261a3d882affe..a5e625d1aeaac62e6989613fe56d1914edab915f 100644 (file)
@@ -9,49 +9,43 @@
 #ifndef BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED
 #define BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/detail/config.hpp>
 #include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#if !defined(BOOST_HAS_TRIVIAL_ASSIGN) || defined(BOOST_MSVC) || defined(__GNUC__) || defined(BOOST_INTEL) || defined(__SUNPRO_CC) || defined(__clang)
 #include <boost/type_traits/is_pod.hpp>
 #include <boost/type_traits/is_const.hpp>
 #include <boost/type_traits/is_volatile.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-#include <boost/type_traits/detail/ice_not.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/is_assignable.hpp>
+#endif
 
 namespace boost {
 
-namespace detail {
-
-template <typename T>
-struct has_trivial_assign_impl
-{
+   template <typename T>
+   struct has_trivial_assign : public integral_constant < bool,
 #ifdef BOOST_HAS_TRIVIAL_ASSIGN
-   BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_TRIVIAL_ASSIGN(T));
+      BOOST_HAS_TRIVIAL_ASSIGN(T)
 #else
-   BOOST_STATIC_CONSTANT(bool, value =
-      (::boost::type_traits::ice_and<
-        ::boost::is_pod<T>::value,
-        ::boost::type_traits::ice_not< ::boost::is_const<T>::value >::value,
-      ::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value
-      >::value));
+      ::boost::is_pod<T>::value && !::boost::is_const<T>::value && !::boost::is_volatile<T>::value
 #endif
-};
+   > {};
 
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_assign,T,::boost::detail::has_trivial_assign_impl<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_assign,void,false)
+   template<> struct has_trivial_assign<void> : public false_type{};
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_assign,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_assign,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_assign,void volatile,false)
+   template<> struct has_trivial_assign<void const> : public false_type{};
+   template<> struct has_trivial_assign<void const volatile> : public false_type{};
+   template<> struct has_trivial_assign<void volatile> : public false_type{};
+#endif
+   template <class T> struct has_trivial_assign<T volatile> : public false_type{};
+   template <class T> struct has_trivial_assign<T&> : public false_type{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+   template <class T> struct has_trivial_assign<T&&> : public false_type{};
 #endif
+   // Arrays are not explictly assignable:
+   template <typename T, std::size_t N> struct has_trivial_assign<T[N]> : public false_type{};
+   template <typename T> struct has_trivial_assign<T[]> : public false_type{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED
index 30dbdd8f93398b7b46020eb25e56eb4e700ffa55..06c137d1dec6c4b7791adf59f72cc0448eccb4c0 100644 (file)
@@ -9,43 +9,49 @@
 #ifndef BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED
 #define BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
 #include <boost/type_traits/intrinsics.hpp>
 #include <boost/type_traits/is_pod.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
+#include <boost/type_traits/is_default_constructible.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#ifdef BOOST_HAS_TRIVIAL_CONSTRUCTOR
+#ifdef BOOST_HAS_SGI_TYPE_TRAITS
+#include <boost/type_traits/is_same.hpp>
+#elif defined(__GNUC__) || defined(__SUNPRO_CC)
+#include <boost/type_traits/is_volatile.hpp>
+#ifdef BOOST_INTEL
+#include <boost/type_traits/is_pod.hpp>
+#endif
+#endif
+#endif
 
-namespace boost {
 
-namespace detail {
+#if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 409)) || defined(BOOST_CLANG) || (defined(__SUNPRO_CC) && defined(BOOST_HAS_TRIVIAL_CONSTRUCTOR))
+#include <boost/type_traits/is_default_constructible.hpp>
+#define BOOST_TT_TRIVIAL_CONSTRUCT_FIX && is_default_constructible<T>::value
+#else
+//
+// Mot all compilers, particularly older GCC versions can handle the fix above.
+#define BOOST_TT_TRIVIAL_CONSTRUCT_FIX
+#endif
+
+namespace boost {
 
-template <typename T>
-struct has_trivial_ctor_impl
-{
+template <typename T> struct has_trivial_constructor
 #ifdef BOOST_HAS_TRIVIAL_CONSTRUCTOR
-   BOOST_STATIC_CONSTANT(bool, value =
-      (::boost::type_traits::ice_or<
-         ::boost::is_pod<T>::value,
-         BOOST_HAS_TRIVIAL_CONSTRUCTOR(T)
-      >::value));
+   : public integral_constant <bool, ((::boost::is_pod<T>::value || BOOST_HAS_TRIVIAL_CONSTRUCTOR(T)) BOOST_TT_TRIVIAL_CONSTRUCT_FIX)>{};
 #else
-   BOOST_STATIC_CONSTANT(bool, value =
-      (::boost::type_traits::ice_or<
-         ::boost::is_pod<T>::value,
-         false
-      >::value));
+   : public integral_constant <bool, ::boost::is_pod<T>::value>{};
 #endif
-};
 
-} // namespace detail
+template <> struct has_trivial_constructor<void> : public boost::false_type{};
+template <> struct has_trivial_constructor<void const> : public boost::false_type{};
+template <> struct has_trivial_constructor<void const volatile> : public boost::false_type{};
+template <> struct has_trivial_constructor<void volatile> : public boost::false_type{};
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_constructor,T,::boost::detail::has_trivial_ctor_impl<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_default_constructor,T,::boost::detail::has_trivial_ctor_impl<T>::value)
+template <class T> struct has_trivial_default_constructor : public has_trivial_constructor<T> {};
 
-} // namespace boost
+#undef BOOST_TT_TRIVIAL_CONSTRUCT_FIX
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
+} // namespace boost
 
 #endif // BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED
index 1c567cf0424f4ab161a8630e5d3bf4c3cee74b42..9d3265d1dc97061fd90e9cfdc96d2bfe746ab6e7 100644 (file)
@@ -9,74 +9,54 @@
 #ifndef BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED
 #define BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
 #include <boost/type_traits/intrinsics.hpp>
-#include <boost/type_traits/is_volatile.hpp>
 #include <boost/type_traits/is_pod.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-#include <boost/type_traits/detail/ice_not.hpp>
+#include <boost/type_traits/is_reference.hpp>
 
-#ifdef __clang__
+#if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 409)) || defined(BOOST_CLANG) || (defined(__SUNPRO_CC) && defined(BOOST_HAS_TRIVIAL_COPY))
 #include <boost/type_traits/is_copy_constructible.hpp>
+#define BOOST_TT_TRIVIAL_CONSTRUCT_FIX && is_copy_constructible<T>::value
+#else
+#define BOOST_TT_TRIVIAL_CONSTRUCT_FIX
 #endif
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#ifdef BOOST_INTEL
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_lvalue_reference.hpp>
+#endif
 
 namespace boost {
 
-namespace detail {
-
-template <typename T>
-struct has_trivial_copy_impl
-{
+template <typename T> struct has_trivial_copy 
+: public integral_constant<bool, 
 #ifdef BOOST_HAS_TRIVIAL_COPY
-#  ifdef __clang__
-   BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_TRIVIAL_COPY(T) && boost::is_copy_constructible<T>::value);
-#  else
-   BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_TRIVIAL_COPY(T));
-#  endif
+   BOOST_HAS_TRIVIAL_COPY(T) BOOST_TT_TRIVIAL_CONSTRUCT_FIX
 #else
-   BOOST_STATIC_CONSTANT(bool, value =
-      (::boost::type_traits::ice_and<
-         ::boost::is_pod<T>::value,
-         ::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value
-      >::value));
-#endif
-};
-
-#ifdef __clang__
-
-template <typename T, std::size_t N>
-struct has_trivial_copy_impl<T[N]>
-{
-   static const bool value = has_trivial_copy_impl<T>::value;
-};
-
+   ::boost::is_pod<T>::value
 #endif
-
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_copy,T,::boost::detail::has_trivial_copy_impl<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_copy_constructor,T,::boost::detail::has_trivial_copy_impl<T>::value)
-
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void,false)
+>{};
+// Arrays are not explicitly copyable:
+template <typename T, std::size_t N> struct has_trivial_copy<T[N]> : public false_type{};
+template <typename T> struct has_trivial_copy<T[]> : public false_type{};
+// Are volatile types ever trivial?  We don't really know, so assume not:
+template <typename T> struct has_trivial_copy<T volatile> : public false_type{};
+
+template <> struct has_trivial_copy<void> : public false_type{};
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void volatile,false)
+template <> struct has_trivial_copy<void const> : public false_type{};
+template <> struct has_trivial_copy<void volatile> : public false_type{};
+template <> struct has_trivial_copy<void const volatile> : public false_type{};
 #endif
 
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void,false)
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void volatile,false)
+template <class T> struct has_trivial_copy<T&> : public false_type{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) 
+template <class T> struct has_trivial_copy<T&&> : public false_type{};
 #endif
 
-} // namespace boost
+template <class T> struct has_trivial_copy_constructor : public has_trivial_copy<T>{};
+
+#undef BOOST_TT_TRIVIAL_CONSTRUCT_FIX
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
+} // namespace boost
 
 #endif // BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED
index 79d7522fdc9a7cdce8cef305993aa856b61bc0da..763283d78c027abef12aa3b0e79cbbc43c1943fa 100644 (file)
@@ -9,41 +9,40 @@
 #ifndef BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED
 #define BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
 #include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#ifdef BOOST_HAS_TRIVIAL_DESTRUCTOR
+
+#if defined(BOOST_INTEL) || defined(BOOST_MSVC)
 #include <boost/type_traits/is_pod.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
+#endif
+#ifdef BOOST_HAS_SGI_TYPE_TRAITS
+#include <boost/type_traits/is_same.hpp>
+#endif
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#if defined(__GNUC__) || defined(__clang) || defined(__SUNPRO_CC)
+#include <boost/type_traits/is_destructible.hpp>
+#endif
 
 namespace boost {
 
-namespace detail {
-
-template <typename T>
-struct has_trivial_dtor_impl
-{
-#ifdef BOOST_HAS_TRIVIAL_DESTRUCTOR
-   BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_TRIVIAL_DESTRUCTOR(T));
+template <typename T> struct has_trivial_destructor : public integral_constant<bool, BOOST_HAS_TRIVIAL_DESTRUCTOR(T)>{};
 #else
-   BOOST_STATIC_CONSTANT(bool, value = ::boost::is_pod<T>::value);
-#endif
-};
+#include <boost/type_traits/is_pod.hpp>
 
-} // namespace detail
+namespace boost{
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_destructor,T,::boost::detail::has_trivial_dtor_impl<T>::value)
+template <typename T> struct has_trivial_destructor : public integral_constant<bool, ::boost::is_pod<T>::value>{};
+#endif
 
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_destructor,void,false)
+template <> struct has_trivial_destructor<void> : public false_type{};
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_destructor,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_destructor,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_destructor,void volatile,false)
+template <> struct has_trivial_destructor<void const> : public false_type{};
+template <> struct has_trivial_destructor<void const volatile> : public false_type{};
+template <> struct has_trivial_destructor<void volatile> : public false_type{};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED
index db337f77e8cc2980cade4af5c85c24881f43b15b..f7bb1987cbece4881079b7d0e286e8206ab8f94a 100644 (file)
 #ifndef BOOST_TT_HAS_TRIVIAL_MOVE_ASSIGN_HPP_INCLUDED
 #define BOOST_TT_HAS_TRIVIAL_MOVE_ASSIGN_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#if !defined(BOOST_HAS_TRIVIAL_MOVE_ASSIGN) || defined(BOOST_MSVC) || defined(BOOST_INTEL)
 #include <boost/type_traits/is_pod.hpp>
 #include <boost/type_traits/is_const.hpp>
 #include <boost/type_traits/is_volatile.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/type_traits/detail/ice_not.hpp>
+#ifdef BOOST_MSVC
+#include <boost/type_traits/is_reference.hpp>
+#endif
+#endif
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#if defined(__GNUC__) || defined(__clang)
+#include <boost/type_traits/is_assignable.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#endif
 
-namespace boost {
+#ifdef __SUNPRO_CC
+#include <boost/type_traits/is_assignable.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#if __cplusplus >= 201103
+#define SOLARIS_EXTRA_CHECK && is_assignable<typename remove_const<T>::type&, typename remove_const<T>::type&&>::value
+#endif
+#endif
+
+#ifndef SOLARIS_EXTRA_CHECK
+#define SOLARIS_EXTRA_CHECK
+#endif
 
-namespace detail {
+namespace boost{
 
 template <typename T>
-struct has_trivial_move_assign_impl
-{
+struct has_trivial_move_assign : public integral_constant<bool,
 #ifdef BOOST_HAS_TRIVIAL_MOVE_ASSIGN
-   BOOST_STATIC_CONSTANT(bool, value = (BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T)));
+   BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T)
 #else
-   BOOST_STATIC_CONSTANT(bool, value =
-           (::boost::type_traits::ice_and<
-              ::boost::is_pod<T>::value,
-              ::boost::type_traits::ice_not< ::boost::is_const<T>::value >::value,
-              ::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value
-           >::value));
+   ::boost::is_pod<T>::value && !::boost::is_const<T>::value && !::boost::is_volatile<T>::value SOLARIS_EXTRA_CHECK
 #endif
-};
+   > {};
 
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_move_assign,T,::boost::detail::has_trivial_move_assign_impl<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_move_assign,void,false)
+template <> struct has_trivial_move_assign<void> : public false_type{};
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_move_assign,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_move_assign,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_move_assign,void volatile,false)
+template <> struct has_trivial_move_assign<void const> : public false_type{};
+template <> struct has_trivial_move_assign<void const volatile> : public false_type{};
+template <> struct has_trivial_move_assign<void volatile> : public false_type{};
+#endif
+template <class T> struct has_trivial_move_assign<T&> : public false_type{};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <class T> struct has_trivial_move_assign<T&&> : public false_type{};
 #endif
+// Array types are not assignable:
+template <class T, std::size_t N> struct has_trivial_move_assign<T[N]> : public false_type{};
+template <class T> struct has_trivial_move_assign<T[]> : public false_type{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
+#undef SOLARIS_EXTRA_CHECK
 
 #endif // BOOST_TT_HAS_TRIVIAL_MOVE_ASSIGN_HPP_INCLUDED
index a3418340b43bca87dd36c2550ea8f6232f8f0b51..9e601f38ae94d9f4ea974861c31c424728bcdca4 100644 (file)
 #ifndef BOOST_TT_HAS_TRIVIAL_MOVE_CONSTRUCTOR_HPP_INCLUDED
 #define BOOST_TT_HAS_TRIVIAL_MOVE_CONSTRUCTOR_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
 #include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#ifdef BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR
+
+#if defined(BOOST_MSVC) || defined(BOOST_INTEL)
 #include <boost/type_traits/is_pod.hpp>
 #include <boost/type_traits/is_volatile.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/type_traits/detail/ice_not.hpp>
+#endif
+
+#if defined(__GNUC__) || defined(__clang)
+#include <boost/type_traits/is_constructible.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#endif
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
 
 namespace boost {
 
-namespace detail {
+template <typename T> struct has_trivial_move_constructor : public integral_constant<bool, BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T)>{};
 
-template <typename T>
-struct has_trivial_move_ctor_impl
-{
-#ifdef BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR
-   BOOST_STATIC_CONSTANT(bool, value = (BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T)));
 #else
-   BOOST_STATIC_CONSTANT(bool, value =
-           (::boost::type_traits::ice_and<
-              ::boost::is_pod<T>::value,
-              ::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value
-           >::value));
+
+#ifdef __SUNPRO_CC
+#include <boost/type_traits/is_constructible.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#if __cplusplus >= 201103
+#define SOLARIS_EXTRA_CHECK && is_constructible<typename remove_const<T>::type, typename remove_const<T>::type&&>::value
+#endif
 #endif
-};
 
-} // namespace detail
+#ifndef SOLARIS_EXTRA_CHECK
+#define SOLARIS_EXTRA_CHECK
+#endif
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_move_constructor,T,::boost::detail::has_trivial_move_ctor_impl<T>::value)
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+
+namespace boost {
+
+template <typename T> struct has_trivial_move_constructor 
+   : public integral_constant<bool, ::boost::is_pod<T>::value && !::boost::is_volatile<T>::value SOLARIS_EXTRA_CHECK>{};
 
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_move_constructor,void,false)
+#undef SOLARIS_EXTRA_CHECK
+
+#endif
+
+template <> struct has_trivial_move_constructor<void> : public false_type{};
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_move_constructor,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_move_constructor,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_move_constructor,void volatile,false)
+template <> struct has_trivial_move_constructor<void const> : public false_type{};
+template <> struct has_trivial_move_constructor<void volatile> : public false_type{};
+template <> struct has_trivial_move_constructor<void const volatile> : public false_type{};
 #endif
+// What should we do with reference types??? The standard seems to suggest these are trivial, even if the thing they reference is not:
+template <class T> struct has_trivial_move_constructor<T&> : public true_type{};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <class T> struct has_trivial_move_constructor<T&&> : public true_type{};
+#endif
+// Arrays can not be explicitly copied:
+template <class T, std::size_t N> struct has_trivial_move_constructor<T[N]> : public false_type{};
+template <class T> struct has_trivial_move_constructor<T[]> : public false_type{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_HAS_TRIVIAL_MOVE_CONSTRUCTOR_HPP_INCLUDED
index b741197d3a8195cc10d09507711a3bc81c102812..4b0f38368ade481cdd2a8b0c7f4701683c07c0e2 100644 (file)
 #define BOOST_TT_HAS_VIRTUAL_DESTRUCTOR_HPP_INCLUDED
 
 #include <boost/type_traits/intrinsics.hpp>
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
 
 #ifdef BOOST_HAS_VIRTUAL_DESTRUCTOR
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_virtual_destructor,T,BOOST_HAS_VIRTUAL_DESTRUCTOR(T))
+   template <class T> struct has_virtual_destructor : public integral_constant<bool, BOOST_HAS_VIRTUAL_DESTRUCTOR(T)>{};
 #else
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_virtual_destructor,T,false)
+   template <class T> struct has_virtual_destructor : public integral_constant<bool, false>{};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/ice.hpp b/3rdparty/boost/boost/type_traits/ice.hpp
deleted file mode 100644 (file)
index 134bc4b..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-//  (C) Copyright John Maddock and Steve Cleary 2000.
-//  Use, modification and distribution are subject to the Boost Software License,
-//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-//  http://www.boost.org/LICENSE_1_0.txt).
-//
-//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
-//
-//  macros and helpers for working with integral-constant-expressions.
-
-#ifndef BOOST_TT_ICE_HPP_INCLUDED
-#define BOOST_TT_ICE_HPP_INCLUDED
-
-#include <boost/type_traits/detail/yes_no_type.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/type_traits/detail/ice_not.hpp>
-#include <boost/type_traits/detail/ice_eq.hpp>
-
-#endif // BOOST_TT_ICE_HPP_INCLUDED
index c6847715e0e60f54b15775328f0f0cc3ccdeeb5b..ae2448d070331cc0d6e79ec02e883d6b6b100562 100644 (file)
@@ -1,4 +1,4 @@
-//  (C) Copyright John Maddock 2005. 
+//  (C) Copyright John Maddock 2015. 
 //  Use, modification and distribution are subject to the 
 //  Boost Software License, Version 1.0. (See accompanying file 
 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -7,32 +7,99 @@
 #define BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP
 
 #include <boost/config.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/integral_c.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if (BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+   || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+   || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \
+   || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
+   || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) )
+
 
 namespace boost{
+   namespace mpl
+   {
+      template <bool B> struct bool_;
+      template <class I, I val> struct integral_c;
+      struct integral_c_tag;
+   }
+}
 
-#if defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) || defined(__BORLANDC__)
-template <class T, int val>
 #else
-template <class T, T val>
-#endif
-struct integral_constant : public mpl::integral_c<T, val>
-{
-   typedef integral_constant<T,val> type;
-};
 
-template<> struct integral_constant<bool,true> : public mpl::true_ 
-{
-   typedef integral_constant<bool,true> type;
-};
-template<> struct integral_constant<bool,false> : public mpl::false_ 
+namespace mpl_{
+
+   template <bool B> struct bool_;
+   template <class I, I val> struct integral_c;
+   struct integral_c_tag;
+}
+
+namespace boost
 {
-   typedef integral_constant<bool,false> type;
-};
+   namespace mpl
+   {
+      using ::mpl_::bool_;
+      using ::mpl_::integral_c;
+      using ::mpl_::integral_c_tag;
+   }
+}
+
+#endif
+
+namespace boost{
+
+   template <class T, T val>
+   struct integral_constant
+   {
+      typedef mpl::integral_c_tag tag;
+      typedef T value_type;
+      typedef integral_constant<T, val> type;
+      static const T value = val;
+      //
+      // This helper function is just to disable type-punning 
+      // warnings from GCC:
+      //
+      template <class U>
+      static U& dereference(U* p) { return *p; }
+
+      operator const mpl::integral_c<T, val>& ()const
+      {
+         static const char data[sizeof(long)] = { 0 };
+         return dereference(reinterpret_cast<const mpl::integral_c<T, val>*>(&data));
+      }
+      BOOST_CONSTEXPR operator T()const { return val; }
+   };
+
+   template <class T, T val>
+   T const integral_constant<T, val>::value;
+      
+   template <bool val>
+   struct integral_constant<bool, val>
+   {
+      typedef mpl::integral_c_tag tag;
+      typedef bool value_type;
+      typedef integral_constant<bool, val> type;
+      static const bool value = val;
+      //
+      // This helper function is just to disable type-punning 
+      // warnings from GCC:
+      //
+      template <class T>
+      static T& dereference(T* p) { return *p; }
+
+      operator const mpl::bool_<val>& ()const
+      {
+         static const char data = 0;
+         return dereference(reinterpret_cast<const mpl::bool_<val>*>(&data));
+      }
+      BOOST_CONSTEXPR operator bool()const { return val; }
+   };
+
+   template <bool val>
+   bool const integral_constant<bool, val>::value;
 
-typedef integral_constant<bool,true> true_type;
-typedef integral_constant<bool,false> false_type;
+   typedef integral_constant<bool, true> true_type;
+   typedef integral_constant<bool, false> false_type;
 
 }
 
index 9c5514b115945e8639b274050228f4713b1ff34a..0478f5634927011ec99e7821413858dd8a826352 100644 (file)
@@ -7,18 +7,12 @@
 #define FILE_boost_type_traits_integral_promotion_hpp_INCLUDED
 
 #include <boost/config.hpp>
-
-#include <boost/mpl/eval_if.hpp>
-#include <boost/mpl/identity.hpp>
 #include <boost/type_traits/integral_constant.hpp>
 #include <boost/type_traits/is_const.hpp>
 #include <boost/type_traits/is_enum.hpp>
 #include <boost/type_traits/is_volatile.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 
-// Should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
 namespace type_traits { namespace detail {
@@ -168,27 +162,20 @@ struct integral_promotion_impl
       >::type type;
 };
 
-template<class T>
-struct integral_promotion
-  : public boost::mpl::eval_if<
-        need_promotion<BOOST_DEDUCED_TYPENAME remove_cv<T>::type>
-      , integral_promotion_impl<T>
-      , boost::mpl::identity<T>
-      >
-{
-};
+template<class T, bool b> struct integral_promotion { typedef T type; };
+template<class T> struct integral_promotion<T, true> : public integral_promotion_impl<T>{};
 
 } }
 
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(
-      integral_promotion
-    , T
-    , BOOST_DEDUCED_TYPENAME
-        boost::type_traits::detail::integral_promotion<T>::type
-    )
-}
+template <class T> struct integral_promotion
+{
+private:
+   typedef boost::type_traits::detail::need_promotion<typename remove_cv<T>::type> tag_type;
+public:
+   typedef typename boost::type_traits::detail::integral_promotion<T, tag_type::value>::type type;
+};
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
+}
 
 #endif // #ifndef FILE_boost_type_traits_integral_promotion_hpp_INCLUDED
 
index e8a87b04e4a151b8b0ff65688bf83223d072113c..e2246be4d3eeaaefdf920ea4ce6e472e187458aa 100644 (file)
@@ -8,8 +8,12 @@
 #ifndef BOOST_TT_INTRINSICS_HPP_INCLUDED
 #define BOOST_TT_INTRINSICS_HPP_INCLUDED
 
+#ifndef BOOST_TT_DISABLE_INTRINSICS
+
+#include <boost/config.hpp>
+
 #ifndef BOOST_TT_CONFIG_HPP_INCLUDED
-#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/detail/config.hpp>
 #endif
 
 //
@@ -44,6 +48,9 @@
 // BOOST_IS_ENUM(T) true is T is an enum
 // BOOST_IS_POLYMORPHIC(T) true if T is a polymorphic type
 // BOOST_ALIGNMENT_OF(T) should evaluate to the alignment requirements of type T.
+//
+// define BOOST_TT_DISABLE_INTRINSICS to prevent any intrinsics being used (mostly used when testing)
+//
 
 #ifdef BOOST_HAS_SGI_TYPE_TRAITS
     // Hook into SGI's __type_traits class, this will pick up user supplied
 
 #if (defined(BOOST_MSVC) && defined(BOOST_MSVC_FULL_VER) && (BOOST_MSVC_FULL_VER >=140050215))\
          || (defined(BOOST_INTEL) && defined(_MSC_VER) && (_MSC_VER >= 1500))
-#   include <boost/type_traits/is_same.hpp>
-#   include <boost/type_traits/is_function.hpp>
-
+//
+// Note that even though these intrinsics rely on other type traits classes
+// we do not #include those here as it produces cyclic dependencies and
+// can cause the intrinsics to not even be used at all!
+//
 #   define BOOST_IS_UNION(T) __is_union(T)
 #   define BOOST_IS_POD(T) (__is_pod(T) && __has_trivial_constructor(T))
 #   define BOOST_IS_EMPTY(T) __is_empty(T)
 #   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)
-#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T)|| ( ::boost::is_pod<T>::value && !::boost::is_volatile<T>::value))
 #   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) || ( ::boost::is_pod<T>::value && ! ::boost::is_const<T>::value && !::boost::is_volatile<T>::value))
 #   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) || ::boost::is_pod<T>::value)
 #   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) || ::boost::has_trivial_constructor<T>::value)
-#   define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) || ::boost::has_trivial_copy<T>::value)
+#if !defined(BOOST_INTEL)
+#   define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) || ::boost::has_trivial_copy<T>::value) && !is_array<T>::value)
+#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) || ::boost::is_pod<T>::value)
+#elif (_MSC_VER >= 1900)
+#   define BOOST_HAS_NOTHROW_COPY(T) ((__is_nothrow_constructible(T, typename add_lvalue_reference<typename add_const<T>::type>::type)) && !is_array<T>::value)
+#   define BOOST_HAS_TRIVIAL_COPY(T) (__is_trivially_constructible(T, typename add_lvalue_reference<typename add_const<T>::type>::type))
+#endif
 #   define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) || ::boost::has_trivial_assign<T>::value)
 #   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
 
 #   define BOOST_IS_CLASS(T) __is_class(T)
 #   define BOOST_IS_CONVERTIBLE(T,U) ((__is_convertible_to(T,U) || (is_same<T,U>::value && !is_function<U>::value)) && !__is_abstract(U))
 #   define BOOST_IS_ENUM(T) __is_enum(T)
-//  This one doesn't quite always do the right thing:
-//  #   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)
 //  This one fails if the default alignment has been changed with /Zp:
 //  #   define BOOST_ALIGNMENT_OF(T) __alignof(T)
 
 #   if defined(_MSC_VER) && (_MSC_VER >= 1700)
-#       define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) ((__has_trivial_move_constructor(T) || __is_pod(T)) && !::boost::is_volatile<T>::value && !::boost::is_reference<T>::value)
-#       define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) ((__has_trivial_move_assign(T) || __is_pod(T)) && ! ::boost::is_const<T>::value && !::boost::is_volatile<T>::value && !::boost::is_reference<T>::value)
+#       define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) ((__has_trivial_move_constructor(T) || boost::is_pod<T>::value) && ! ::boost::is_volatile<T>::value && ! ::boost::is_reference<T>::value)
+#       define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) ((__has_trivial_move_assign(T) || boost::is_pod<T>::value) && ! ::boost::is_const<T>::value && !::boost::is_volatile<T>::value && ! ::boost::is_reference<T>::value)
 #   endif
+#ifndef BOOST_NO_CXX11_FINAL
+//  This one doesn't quite always do the right thing on older VC++ versions
+//  we really need it when the final keyword is supporyted though:
+#   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)
+#endif
 #if _MSC_FULL_VER >= 180020827
 #   define BOOST_IS_NOTHROW_MOVE_ASSIGN(T) (__is_nothrow_assignable(T&, T&&))
 #   define BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T) (__is_nothrow_constructible(T, T&&))
 // This is a rubbish fix as it basically stops type traits from working correctly, 
 // but maybe the best we can do for now.  See https://svn.boost.org/trac/boost/ticket/10694
 //
+//
+// Note that even though these intrinsics rely on other type traits classes
+// we do not #include those here as it produces cyclic dependencies and
+// can cause the intrinsics to not even be used at all!
+//
 #   include <cstddef>
-#   include <boost/type_traits/is_same.hpp>
-#   include <boost/type_traits/is_reference.hpp>
-#   include <boost/type_traits/is_volatile.hpp>
 
 #   if __has_feature(is_union)
 #     define BOOST_IS_UNION(T) __is_union(T)
 #     define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)
 #   endif
 #   if __has_feature(has_trivial_copy)
-#     define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value && !is_volatile<T>::value)
+#     define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value)
 #   endif
 #   if __has_feature(has_trivial_assign)
-#     define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value)
+#     define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value && is_assignable<T&, const T&>::value)
 #   endif
 #   if __has_feature(has_trivial_destructor)
-#     define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
+#     define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T)  && is_destructible<T>::value)
 #   endif
 #   if __has_feature(has_nothrow_constructor)
-#     define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)
+#     define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) && is_default_constructible<T>::value)
 #   endif
 #   if __has_feature(has_nothrow_copy)
-#     define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) && !is_volatile<T>::value && !is_reference<T>::value)
+#     define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) && !is_volatile<T>::value && !is_reference<T>::value && is_copy_constructible<T>::value)
 #   endif
 #   if __has_feature(has_nothrow_assign)
-#     define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value)
+#     define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value && is_assignable<T&, const T&>::value)
 #   endif
 #   if __has_feature(has_virtual_destructor)
 #     define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
 #     define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)
 #   endif
 #   if __has_feature(has_trivial_move_constructor)
-#     define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) __has_trivial_move_constructor(T)
+#     define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) (__has_trivial_move_constructor(T)  && is_constructible<T, T&&>::value && !::boost::is_volatile<T>::value)
 #   endif
 #   if __has_feature(has_trivial_move_assign)
-#     define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) __has_trivial_move_assign(T)
+#     define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) (__has_trivial_move_assign(T) && is_assignable<T&, T&&>::value && !::boost::is_volatile<T>::value)
+#   endif
+#   if (!defined(unix) && !defined(__unix__)) || defined(__LP64__) || !defined(__GNUC__)
+// GCC sometimes lies about alignment requirements
+// of type double on 32-bit unix platforms, use the
+// old implementation instead in that case:
+#     define BOOST_ALIGNMENT_OF(T) __alignof(T)
 #   endif
-#   define BOOST_ALIGNMENT_OF(T) __alignof(T)
 #   if __has_feature(is_final)
 #     define BOOST_IS_FINAL(T) __is_final(T)
 #   endif
 #endif
 
 #if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3) && !defined(__GCCXML__))) && !defined(BOOST_CLANG)
-#   include <boost/type_traits/is_same.hpp>
-#   include <boost/type_traits/is_reference.hpp>
-#   include <boost/type_traits/is_volatile.hpp>
+//
+// Note that even though these intrinsics rely on other type traits classes
+// we do not #include those here as it produces cyclic dependencies and
+// can cause the intrinsics to not even be used at all!
+//
 
 #ifdef BOOST_INTEL
 #  define BOOST_INTEL_TT_OPTS || is_pod<T>::value
 #   define BOOST_IS_POD(T) __is_pod(T)
 #   define BOOST_IS_EMPTY(T) __is_empty(T)
 #   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) ((__has_trivial_constructor(T) BOOST_INTEL_TT_OPTS) && ! ::boost::is_volatile<T>::value)
-#   define BOOST_HAS_TRIVIAL_COPY(T) ((__has_trivial_copy(T) BOOST_INTEL_TT_OPTS) && !is_reference<T>::value && ! ::boost::is_volatile<T>::value)
+#   define BOOST_HAS_TRIVIAL_COPY(T) ((__has_trivial_copy(T) BOOST_INTEL_TT_OPTS) && !is_reference<T>::value)
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409
+#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ((__has_trivial_assign(T) BOOST_INTEL_TT_OPTS) && ! ::boost::is_volatile<T>::value && ! ::boost::is_const<T>::value && is_assignable<T&, const T&>::value)
+#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) BOOST_INTEL_TT_OPTS && is_destructible<T>::value)
+#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) && is_default_constructible<T>::value BOOST_INTEL_TT_OPTS)
+#   define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_reference<T>::value && is_copy_constructible<T>::value)
+#   define BOOST_HAS_NOTHROW_ASSIGN(T) ((__has_nothrow_assign(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_const<T>::value && is_assignable<T&, const T&>::value)
+#else
 #   define BOOST_HAS_TRIVIAL_ASSIGN(T) ((__has_trivial_assign(T) BOOST_INTEL_TT_OPTS) && ! ::boost::is_volatile<T>::value && ! ::boost::is_const<T>::value)
 #   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) BOOST_INTEL_TT_OPTS)
 #   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) BOOST_INTEL_TT_OPTS)
-#   define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_reference<T>::value)
-#   define BOOST_HAS_NOTHROW_ASSIGN(T) ((__has_nothrow_assign(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_const<T>::value)
+#   define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_reference<T>::value && !is_array<T>::value)
+#   define BOOST_HAS_NOTHROW_ASSIGN(T) ((__has_nothrow_assign(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_const<T>::value && !is_array<T>::value)
+#endif
 #   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
 
 #   define BOOST_IS_ABSTRACT(T) __is_abstract(T)
 #     define BOOST_IS_FINAL(T) __is_final(T)
 #   endif
 
+#   if (__GNUC__ >= 5) && (__cplusplus >= 201103)
+#     define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) (__is_trivially_assignable(T&, T&&) && is_assignable<T&, T&&>::value && !::boost::is_volatile<T>::value)
+#     define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) (__is_trivially_constructible(T, T&&) && is_constructible<T, T&&>::value && !::boost::is_volatile<T>::value)
+#   endif
+
 #   define BOOST_HAS_TYPE_TRAITS_INTRINSICS
 #endif
 
 #if defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130)
-#   include <boost/type_traits/is_same.hpp>
-#   include <boost/type_traits/is_reference.hpp>
-#   include <boost/type_traits/is_volatile.hpp>
-
 #   define BOOST_IS_UNION(T) __oracle_is_union(T)
-#   define BOOST_IS_POD(T) __oracle_is_pod(T)
+#   define BOOST_IS_POD(T) (__oracle_is_pod(T) && !is_function<T>::value)
 #   define BOOST_IS_EMPTY(T) __oracle_is_empty(T)
 #   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__oracle_has_trivial_constructor(T) && ! ::boost::is_volatile<T>::value)
-#   define BOOST_HAS_TRIVIAL_COPY(T) (__oracle_has_trivial_copy(T) && !is_reference<T>::value && ! ::boost::is_volatile<T>::value)
-#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ((__oracle_has_trivial_assign(T) || __oracle_is_trivial(T)) && ! ::boost::is_volatile<T>::value && ! ::boost::is_const<T>::value)
-#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __oracle_has_trivial_destructor(T)
-#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__oracle_has_nothrow_constructor(T) || __oracle_has_trivial_constructor(T) || __oracle_is_trivial(T))
-#   define BOOST_HAS_NOTHROW_COPY(T) ((__oracle_has_nothrow_copy(T) || __oracle_has_trivial_copy(T) || __oracle_is_trivial(T)) && !is_volatile<T>::value && !is_reference<T>::value)
-#   define BOOST_HAS_NOTHROW_ASSIGN(T) ((__oracle_has_nothrow_assign(T) || __oracle_has_trivial_assign(T) || __oracle_is_trivial(T)) && !is_volatile<T>::value && !is_const<T>::value)
+#   define BOOST_HAS_TRIVIAL_COPY(T) (__oracle_has_trivial_copy(T) && !is_reference<T>::value)
+#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ((__oracle_has_trivial_assign(T) || __oracle_is_trivial(T)) && ! ::boost::is_volatile<T>::value && ! ::boost::is_const<T>::value && is_assignable<T&, const T&>::value)
+#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__oracle_has_trivial_destructor(T) && is_destructible<T>::value)
+#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) ((__oracle_has_nothrow_constructor(T) || __oracle_has_trivial_constructor(T) || __oracle_is_trivial(T)) && is_default_constructible<T>::value)
+//  __oracle_has_nothrow_copy appears to behave the same as __oracle_has_nothrow_assign, disabled for now:
+//#   define BOOST_HAS_NOTHROW_COPY(T) ((__oracle_has_nothrow_copy(T) || __oracle_has_trivial_copy(T) || __oracle_is_trivial(T)) && !is_volatile<T>::value && !is_reference<T>::value && is_copy_constructible<T>::value)
+#   define BOOST_HAS_NOTHROW_ASSIGN(T) ((__oracle_has_nothrow_assign(T) || __oracle_has_trivial_assign(T) || __oracle_is_trivial(T)) && !is_volatile<T>::value && !is_const<T>::value && is_assignable<T&, const T&>::value)
 #   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __oracle_has_virtual_destructor(T)
 
 #   define BOOST_IS_ABSTRACT(T) __oracle_is_abstract(T)
 #   define BOOST_IS_POD(T) __is_pod(T)
 #   define BOOST_IS_EMPTY(T) __is_empty(T)
 #   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)
-#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value && !is_volatile<T>::value)
+#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value)
 #   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value)
 #   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
 #   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)
 #   define BOOST_IS_POD(T) __is_pod(T)
 #   define BOOST_IS_EMPTY(T) __is_empty(T)
 #   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__has_trivial_default_constructor(T))
-#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy_constructor(T) && !is_volatile<T>::value && !is_reference<T>::value)
+#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy_constructor(T) && !is_reference<T>::value)
 #   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value)
 #   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T))
 #   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_default_constructor(T))
 #   define BOOST_HAS_TYPE_TRAITS_INTRINSICS
 #endif
 
-#endif // BOOST_TT_INTRINSICS_HPP_INCLUDED
-
-
-
-
-
+#endif // BOOST_TT_DISABLE_INTRINSICS
 
+#endif // BOOST_TT_INTRINSICS_HPP_INCLUDED
 
index f1cd92c67cdbe08ad63bba0c243adfeda28ca4c6..7715c5ca375fe9e2468be44ba54587c528d1b9ea 100644 (file)
 //
 
 #include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 #ifndef BOOST_IS_ABSTRACT
 #include <boost/static_assert.hpp>
 #include <boost/type_traits/detail/yes_no_type.hpp>
 #include <boost/type_traits/is_class.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
 #ifdef BOOST_NO_IS_ABSTRACT
 #include <boost/type_traits/is_polymorphic.hpp>
 #endif
 #endif
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 
 namespace boost {
+
 namespace detail{
 
 #ifdef BOOST_IS_ABSTRACT
@@ -141,13 +139,11 @@ struct is_abstract_imp
 }
 
 #ifndef BOOST_NO_IS_ABSTRACT
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_abstract,T,::boost::detail::is_abstract_imp<T>::value)
+template <class T> struct is_abstract : public integral_constant<bool, ::boost::detail::is_abstract_imp<T>::value> {};
 #else
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_abstract,T,::boost::detail::is_polymorphic_imp<T>::value)
+template <class T> struct is_abstract : public integral_constant<bool, ::boost::detail::is_polymorphic_imp<T>::value> {};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif //BOOST_TT_IS_ABSTRACT_CLASS_HPP
index a1d8c46d5f0b4816b221754b50229034e4391ac0..c23811ebea3da6d9755904696c4897d197fb778f 100644 (file)
@@ -9,43 +9,14 @@
 #ifndef BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED
 #define BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED
 
-#if !defined( __CODEGEARC__ )
 #include <boost/type_traits/is_integral.hpp>
-#include <boost/type_traits/is_float.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-#include <boost/config.hpp>
-#endif
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
 
 namespace boost {
 
-#if !defined(__CODEGEARC__)
-namespace detail {
-
-template< typename T >
-struct is_arithmetic_impl
-{ 
-    BOOST_STATIC_CONSTANT(bool, value = 
-        (::boost::type_traits::ice_or< 
-            ::boost::is_integral<T>::value,
-            ::boost::is_float<T>::value
-        >::value)); 
-};
-
-} // namespace detail
-#endif
-
-//* is a type T an arithmetic type described in the standard (3.9.1p8)
-#if defined(__CODEGEARC__)
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_arithmetic,T,__is_arithmetic(T))
-#else
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_arithmetic,T,::boost::detail::is_arithmetic_impl<T>::value)
-#endif
+template <class T>
+struct is_arithmetic : public integral_constant<bool, is_integral<T>::value || is_floating_point<T>::value> {};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED
index c381ca4e706f9f8ba799b886735c261d15d1e977..497dc49327fefa62d5f12cb5f548a68e564c16f6 100644 (file)
 #ifndef BOOST_TT_IS_ARRAY_HPP_INCLUDED
 #define BOOST_TT_IS_ARRAY_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
-
-
+#include <boost/type_traits/integral_constant.hpp>
 #include <cstddef>
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 namespace boost {
 
 #if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,__is_array(T))
+   template <class T> struct is_array : public integral_constant<bool, __is_array(T)> {};
 #else
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,false)
+   template <class T> struct is_array : public false_type {};
 #if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T[N],true)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T const[N],true)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T volatile[N],true)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T const volatile[N],true)
+   template <class T, std::size_t N> struct is_array<T[N]> : public true_type {};
+   template <class T, std::size_t N> struct is_array<T const[N]> : public true_type{};
+   template <class T, std::size_t N> struct is_array<T volatile[N]> : public true_type{};
+   template <class T, std::size_t N> struct is_array<T const volatile[N]> : public true_type{};
 #if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T[],true)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T const[],true)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T volatile[],true)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T const volatile[],true)
+   template <class T> struct is_array<T[]> : public true_type{};
+   template <class T> struct is_array<T const[]> : public true_type{};
+   template <class T> struct is_array<T const volatile[]> : public true_type{};
+   template <class T> struct is_array<T volatile[]> : public true_type{};
 #endif
 #endif
 
@@ -45,6 +40,4 @@ BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T const volatile[],t
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_ARRAY_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/is_assignable.hpp b/3rdparty/boost/boost/type_traits/is_assignable.hpp
new file mode 100644 (file)
index 0000000..9cf681d
--- /dev/null
@@ -0,0 +1,76 @@
+
+//  (C) Copyright John Maddock 2015.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_ASSIGNABLE_HPP_INCLUDED
+#define BOOST_TT_IS_ASSIGNABLE_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost{
+
+   template <class T, class U = T> struct is_assignable;
+
+}
+
+#if !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800)
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/declval.hpp>
+
+namespace boost{
+
+   namespace detail{
+
+      struct is_assignable_imp
+      {
+         template<typename T, typename U, typename = decltype(boost::declval<T>() = boost::declval<U>())>
+         static boost::type_traits::yes_type test(int);
+
+         template<typename, typename>
+         static boost::type_traits::no_type test(...);
+      };
+
+   }
+
+   template <class T, class U> struct is_assignable : public integral_constant<bool, sizeof(detail::is_assignable_imp::test<T, U>(0)) == sizeof(boost::type_traits::yes_type)>{};
+   template <class T, std::size_t N, class U> struct is_assignable<T[N], U> : public is_assignable<T, U>{};
+   template <class T, std::size_t N, class U> struct is_assignable<T(&)[N], U> : public is_assignable<T&, U>{};
+   template <class T, class U> struct is_assignable<T[], U> : public is_assignable<T, U>{};
+   template <class T, class U> struct is_assignable<T(&)[], U> : public is_assignable<T&, U>{};
+   template <class U> struct is_assignable<void, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void const, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void volatile, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void const volatile, U> : public integral_constant<bool, false>{};
+
+#else
+
+#include <boost/type_traits/has_trivial_assign.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace boost{
+
+   // We don't know how to implement this:
+   template <class T, class U> struct is_assignable : public integral_constant<bool, false>{};
+   template <class T, class U> struct is_assignable<T&, U> : public integral_constant<bool, is_pod<T>::value && is_pod<typename remove_reference<U>::type>::value>{};
+   template <class T, class U> struct is_assignable<const T&, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void const, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void volatile, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void const volatile, U> : public integral_constant<bool, false>{};
+   /*
+   template <> struct is_assignable<void, void> : public integral_constant<bool, false>{};
+   template <> struct is_assignable<void const, void const> : public integral_constant<bool, false>{};
+   template <> struct is_assignable<void volatile, void volatile> : public integral_constant<bool, false>{};
+   template <> struct is_assignable<void const volatile, void const volatile> : public integral_constant<bool, false>{};
+   */
+#endif
+
+} // namespace boost
+
+#endif // BOOST_TT_IS_ASSIGNABLE_HPP_INCLUDED
index 632b699445db719ea6eb27e575f1b0eef99c72b5..ee3dce597c1a82189091ed621d73e3d6bc26fad1 100644 (file)
 #define BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED
 
 #include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 #ifndef BOOST_IS_BASE_OF
 #include <boost/type_traits/is_class.hpp>
 #include <boost/type_traits/is_same.hpp>
 #include <boost/type_traits/is_convertible.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
 #include <boost/config.hpp>
 #include <boost/static_assert.hpp>
 #endif
 #include <boost/type_traits/remove_cv.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/is_same.hpp>
 
 namespace boost {
 
@@ -230,23 +228,17 @@ struct is_base_and_derived_impl
 #endif
 } // namespace detail
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF2(
-      is_base_and_derived
-    , Base
-    , Derived
-    , (::boost::detail::is_base_and_derived_impl<Base,Derived>::value)
-    )
+template <class Base, class Derived> struct is_base_and_derived
+   : public integral_constant<bool, (::boost::detail::is_base_and_derived_impl<Base, Derived>::value)> {};
 
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_and_derived,Base&,Derived,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_and_derived,Base,Derived&,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_and_derived,Base&,Derived&,false)
+template <class Base, class Derived> struct is_base_and_derived<Base&, Derived> : public false_type{};
+template <class Base, class Derived> struct is_base_and_derived<Base, Derived&> : public false_type{};
+template <class Base, class Derived> struct is_base_and_derived<Base&, Derived&> : public false_type{};
 
 #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610))
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename Base,is_base_and_derived,Base,Base,false)
+template <class Base> struct is_base_and_derived<Base, Base> : public true_type{};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED
index 3655b0bd23ab5ee26c5e6557260bfa7ff7d70c2d..89f2f67980297a0cab5bdbf9b9024821a64f6d3a 100644 (file)
 #include <boost/type_traits/is_base_and_derived.hpp>
 #include <boost/type_traits/is_same.hpp>
 #include <boost/type_traits/is_class.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
 
 namespace boost {
 
@@ -26,24 +21,19 @@ namespace boost {
       {
           typedef typename remove_cv<B>::type ncvB;
           typedef typename remove_cv<D>::type ncvD;
-          BOOST_STATIC_CONSTANT(bool, value = (::boost::type_traits::ice_or<      
-            (::boost::detail::is_base_and_derived_impl<ncvB,ncvD>::value),
-            (::boost::type_traits::ice_and< ::boost::is_same<ncvB,ncvD>::value, ::boost::is_class<ncvB>::value>::value)>::value));
+          BOOST_STATIC_CONSTANT(bool, value = (
+            (::boost::detail::is_base_and_derived_impl<ncvB,ncvD>::value) ||
+            (::boost::is_same<ncvB,ncvD>::value && ::boost::is_class<ncvB>::value)));
       };
    }
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF2(
-      is_base_of
-    , Base
-    , Derived
-    , (::boost::detail::is_base_of_imp<Base, Derived>::value))
+   template <class Base, class Derived> struct is_base_of
+      : public integral_constant<bool, (::boost::detail::is_base_of_imp<Base, Derived>::value)> {};
 
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_of,Base&,Derived,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_of,Base,Derived&,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_of,Base&,Derived&,false)
+   template <class Base, class Derived> struct is_base_of<Base, Derived&> : false_type{};
+   template <class Base, class Derived> struct is_base_of<Base&, Derived&> : false_type{};
+   template <class Base, class Derived> struct is_base_of<Base&, Derived> : false_type{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED
index 0675b57822a2c47b519e4a09555f902524cdc3c6..e3a22d2b63941bf40557c4dafc5153c70fc758b5 100644 (file)
 #ifndef BOOST_TT_IS_CLASS_HPP_INCLUDED
 #define BOOST_TT_IS_CLASS_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/detail/config.hpp>
 #include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 #ifndef BOOST_IS_CLASS
 #   include <boost/type_traits/is_union.hpp>
-#   include <boost/type_traits/detail/ice_and.hpp>
-#   include <boost/type_traits/detail/ice_not.hpp>
 
 #ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
 #   include <boost/type_traits/detail/yes_no_type.hpp>
 
 #endif // BOOST_IS_CLASS
 
-#ifdef __EDG_VERSION__
-#   include <boost/type_traits/remove_cv.hpp>
-#endif
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 namespace boost {
 
 namespace detail {
@@ -63,10 +55,8 @@ struct is_class_impl
 {
 
     BOOST_STATIC_CONSTANT(bool, value =
-        (::boost::type_traits::ice_and<
-            sizeof(is_class_tester<T>(0)) == sizeof(::boost::type_traits::yes_type),
-            ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value
-        >::value)
+            sizeof(is_class_tester<T>(0)) == sizeof(::boost::type_traits::yes_type)
+            && ! ::boost::is_union<T>::value
         );
 };
 
@@ -79,10 +69,8 @@ struct is_class_impl
     template <class U> static ::boost::type_traits::no_type is_class_tester(...);
 
     BOOST_STATIC_CONSTANT(bool, value =
-        (::boost::type_traits::ice_and<
-            sizeof(is_class_tester<T>(0)) == sizeof(::boost::type_traits::yes_type),
-            ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value
-        >::value)
+            sizeof(is_class_tester<T>(0)) == sizeof(::boost::type_traits::yes_type)
+            && ! ::boost::is_union<T>::value
         );
 };
 
@@ -94,14 +82,13 @@ template <typename T>
 struct is_class_impl
 {
     BOOST_STATIC_CONSTANT(bool, value =
-    (::boost::type_traits::ice_and<
-        ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value,
-        ::boost::type_traits::ice_not< ::boost::is_scalar<T>::value >::value,
-        ::boost::type_traits::ice_not< ::boost::is_array<T>::value >::value,
-        ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,
-        ::boost::type_traits::ice_not< ::boost::is_void<T>::value >::value,
-        ::boost::type_traits::ice_not< ::boost::is_function<T>::value >::value
-        >::value));
+        ! ::boost::is_union<T>::value >::value
+        && ! ::boost::is_scalar<T>::value
+        && ! ::boost::is_array<T>::value
+        && ! ::boost::is_reference<T>::value
+        && ! ::boost::is_void<T>::value
+        && ! ::boost::is_function<T>::value
+        );
 };
 
 # endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
@@ -115,15 +102,13 @@ struct is_class_impl
 
 } // namespace detail
 
+template <class T> struct is_class : public integral_constant<bool, ::boost::detail::is_class_impl<T>::value> {};
 # ifdef __EDG_VERSION__
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(
-   is_class,T, boost::detail::is_class_impl<typename boost::remove_cv<T>::type>::value)
-# else 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_class,T,::boost::detail::is_class_impl<T>::value)
+template <class T> struct is_class<const T> : public is_class<T>{};
+template <class T> struct is_class<const volatile T> : public is_class<T>{};
+template <class T> struct is_class<volatile T> : public is_class<T>{};
 # endif
     
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_CLASS_HPP_INCLUDED
index 0813dac903dc4badc250a857a5f74338d04ec8e4..7cf04b47968385c6c5f63bff68a02d9aaebba500 100644 (file)
@@ -8,27 +8,17 @@
 #ifndef BOOST_TT_IS_COMPLEX_HPP
 #define BOOST_TT_IS_COMPLEX_HPP
 
-#include <boost/type_traits/is_convertible.hpp>
 #include <complex>
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
-namespace detail{
-
-struct is_convertible_from_tester
-{
-   template <class T>
-   is_convertible_from_tester(const std::complex<T>&);
-};
 
-}
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_complex,T,(::boost::is_convertible<T, boost::detail::is_convertible_from_tester>::value))
+   template <class T> struct is_complex : public false_type {};
+   template <class T> struct is_complex<const T > : public is_complex<T>{};
+   template <class T> struct is_complex<volatile const T > : public is_complex<T>{};
+   template <class T> struct is_complex<volatile T > : public is_complex<T>{};
+   template <class T> struct is_complex<std::complex<T> > : public true_type{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif //BOOST_TT_IS_COMPLEX_HPP
index bbaaa42cd7ec9130515d07786b38895b0ce1b0dd..7995eb8a2378b867f795d97574b49e2abe4d2b56 100644 (file)
@@ -9,38 +9,16 @@
 #ifndef BOOST_TT_IS_COMPOUND_HPP_INCLUDED
 #define BOOST_TT_IS_COMPOUND_HPP_INCLUDED
 
-#include <boost/config.hpp>
 #include <boost/type_traits/is_fundamental.hpp>
-#include <boost/type_traits/detail/ice_not.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
 
 namespace boost {
 
-#if !defined( __CODEGEARC__ )
-namespace detail {
-
-template <typename T>
-struct is_compound_impl
-{
-   BOOST_STATIC_CONSTANT(bool, value =
-      (::boost::type_traits::ice_not<
-         ::boost::is_fundamental<T>::value
-       >::value));
-};
-
-} // namespace detail
-#endif // !defined( __CODEGEARC__ )
-
 #if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_compound,T,__is_compound(T))
+   template <class T> struct is_compound : public integral_constant<bool, __is_compound(T)> {};
 #else
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_compound,T,::boost::detail::is_compound_impl<T>::value)
+   template <class T> struct is_compound : public integral_constant<bool, ! ::boost::is_fundamental<T>::value> {};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_COMPOUND_HPP_INCLUDED
index e3e62b697c5e58faed2b78ffef9cff624c0e2ded..d9dd2aa3263289efe1a421e22d83951ede48bc56 100644 (file)
 #ifndef BOOST_TT_IS_CONST_HPP_INCLUDED
 #define BOOST_TT_IS_CONST_HPP_INCLUDED
 
-#include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
-
-#   include <boost/type_traits/detail/cv_traits_impl.hpp>
-#   ifdef __GNUC__
-#       include <boost/type_traits/is_reference.hpp>
-#   endif
-#   if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
-#       include <boost/type_traits/remove_bounds.hpp>
-#   endif
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
 
 #if defined( __CODEGEARC__ )
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,__is_const(T))
+   template <class T>
+   struct is_const : public integral_constant<bool, __is_const(T)> {};
 
 #else
 
-namespace detail{
-//
-// We can't filter out rvalue_references at the same level as
-// references or we get ambiguities from msvc:
-//
-template <class T>
-struct is_const_rvalue_filter
-{
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
-   BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<typename boost::remove_bounds<T>::type*>::is_const);
-#else
-   BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::is_const);
-#endif
-};
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-template <class T>
-struct is_const_rvalue_filter<T&&>
-{
-   BOOST_STATIC_CONSTANT(bool, value = false);
-};
-#endif
-}
-
-//* is a type T  declared const - is_const<T>
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::is_const_rvalue_filter<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T&,false)
-
-#if  defined(BOOST_ILLEGAL_CV_REFERENCES)
-// these are illegal specialisations; cv-qualifies applied to
-// references have no effect according to [8.3.2p1],
-// C++ Builder requires them though as it treats cv-qualified
-// references as distinct types...
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& const,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& const volatile,false)
-#endif
+   template <class T>
+   struct is_const : public false_type {};
+   template <class T> struct is_const<T const> : public true_type{};
+   template <class T, size_t N> struct is_const<T const[N]> : public true_type{};
+   template <class T> struct is_const<T const[]> : public true_type{};
 
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_CONST_HPP_INCLUDED
 
diff --git a/3rdparty/boost/boost/type_traits/is_constructible.hpp b/3rdparty/boost/boost/type_traits/is_constructible.hpp
new file mode 100644 (file)
index 0000000..2017317
--- /dev/null
@@ -0,0 +1,80 @@
+
+//  (C) Copyright John Maddock 2015.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_CONSTRUCTIBLE_HPP_INCLUDED
+#define BOOST_TT_IS_CONSTRUCTIBLE_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40500)
+
+#include <boost/type_traits/is_destructible.hpp>
+#include <boost/type_traits/is_default_constructible.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/declval.hpp>
+
+namespace boost{
+
+   namespace detail{
+
+      struct is_constructible_imp
+      {
+         template<typename T, typename ...TheArgs, typename = decltype(T(boost::declval<TheArgs>()...))>
+         static boost::type_traits::yes_type test(int);
+         template<typename, typename...>
+         static boost::type_traits::no_type test(...);
+
+         template<typename T, typename Arg, typename = decltype(::new T(boost::declval<Arg>()))>
+         static boost::type_traits::yes_type test1(int);
+         template<typename, typename>
+         static boost::type_traits::no_type test1(...);
+
+         template <typename T>
+         static boost::type_traits::yes_type ref_test(T);
+         template <typename T>
+         static boost::type_traits::no_type ref_test(...);
+      };
+
+   }
+
+   template <class T, class ...Args> struct is_constructible : public integral_constant<bool, sizeof(detail::is_constructible_imp::test<T, Args...>(0)) == sizeof(boost::type_traits::yes_type)>{};
+   template <class T, class Arg> struct is_constructible<T, Arg> : public integral_constant<bool, is_destructible<T>::value && sizeof(detail::is_constructible_imp::test1<T, Arg>(0)) == sizeof(boost::type_traits::yes_type)>{};
+   template <class Ref, class Arg> struct is_constructible<Ref&, Arg> : public integral_constant<bool, sizeof(detail::is_constructible_imp::ref_test<Ref&>(boost::declval<Arg>())) == sizeof(boost::type_traits::yes_type)>{};
+   template <class Ref, class Arg> struct is_constructible<Ref&&, Arg> : public integral_constant<bool, sizeof(detail::is_constructible_imp::ref_test<Ref&&>(boost::declval<Arg>())) == sizeof(boost::type_traits::yes_type)>{};
+
+   template <> struct is_constructible<void> : public false_type{};
+   template <> struct is_constructible<void const> : public false_type{};
+   template <> struct is_constructible<void const volatile> : public false_type{};
+   template <> struct is_constructible<void volatile> : public false_type{};
+
+   template <class T> struct is_constructible<T> : public is_default_constructible<T>{};
+
+#else
+
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_default_constructible.hpp>
+
+namespace boost{
+
+   // We don't know how to implement this:
+   template <class T, class U = void> struct is_constructible : public is_convertible<U, T>{};
+   template <class T> struct is_constructible<T, void> : public is_default_constructible<T>{};
+   template <> struct is_constructible<void, void> : public false_type{};
+   template <> struct is_constructible<void const, void> : public false_type{};
+   template <> struct is_constructible<void const volatile, void> : public false_type{};
+   template <> struct is_constructible<void volatile, void> : public false_type{};
+   template <class Ref> struct is_constructible<Ref&, void> : public false_type{};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+   template <class Ref> struct is_constructible<Ref&&, void> : public false_type{};
+#endif
+#endif
+
+} // namespace boost
+
+#endif // BOOST_TT_IS_CONSTRUCTIBLE_HPP_INCLUDED
index a844cecb3655624989c6a5236ddaa97d5daf7eb5..417ece20b40e4b9070bc5de9bcc542cba0fcc6bb 100644 (file)
 #define BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED
 
 #include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 #ifndef BOOST_IS_CONVERTIBLE
 #include <boost/type_traits/detail/yes_no_type.hpp>
-#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/detail/config.hpp>
 #include <boost/type_traits/is_array.hpp>
-#include <boost/type_traits/ice.hpp>
 #include <boost/type_traits/is_arithmetic.hpp>
 #include <boost/type_traits/is_void.hpp>
-#ifndef BOOST_NO_IS_ABSTRACT
+#if !defined(BOOST_NO_IS_ABSTRACT)
 #include <boost/type_traits/is_abstract.hpp>
 #endif
 #include <boost/type_traits/add_lvalue_reference.hpp>
 #include <boost/type_traits/remove_reference.hpp>
 #endif
 #if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
-#  include <boost/utility/declval.hpp>
+#  include <boost/type_traits/declval.hpp>
 #endif
+#elif defined(BOOST_MSVC) || defined(BOOST_INTEL)
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/is_same.hpp>
 #endif // BOOST_IS_CONVERTIBLE
 
-// should be always the last #include directive
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 namespace boost {
 
 #ifndef BOOST_IS_CONVERTIBLE
@@ -54,7 +54,7 @@ namespace boost {
 
 namespace detail {
 
-#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !(defined(BOOST_GCC) && (BOOST_GCC < 40700))
 
    // This is a C++11 conforming version, place this first and use it wherever possible:
 
@@ -300,13 +300,26 @@ struct is_convertible_basic_impl:
 // This version seems to work pretty well for a wide spectrum of compilers,
 // however it does rely on undefined behaviour by passing UDT's through (...).
 //
+
+//Workaround for old compilers like MSVC 7.1 to avoid
+//forming a reference to an array of unknown bound
+template <typename From>
+struct is_convertible_basic_impl_add_lvalue_reference
+   : add_lvalue_reference<From>
+{};
+
+template <typename From>
+struct is_convertible_basic_impl_add_lvalue_reference<From[]>
+{
+    typedef From type [];
+};
+
 template <typename From, typename To>
 struct is_convertible_basic_impl
 {
     static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...);
     static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To);
-    typedef typename add_lvalue_reference<From>::type lvalue_type;
-    typedef typename add_rvalue_reference<From>::type rvalue_type; 
+    typedef typename is_convertible_basic_impl_add_lvalue_reference<From>::type lvalue_type;
     static lvalue_type _m_from;
 #ifdef BOOST_MSVC
 #pragma warning(push)
@@ -316,6 +329,7 @@ struct is_convertible_basic_impl
 #endif
 #endif
 #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    typedef typename add_rvalue_reference<From>::type rvalue_type; 
     BOOST_STATIC_CONSTANT(bool, value =
         sizeof( _m_check(static_cast<rvalue_type>(_m_from)) ) == sizeof(::boost::type_traits::yes_type)
         );
@@ -336,38 +350,15 @@ struct is_convertible_basic_impl
 template <typename From, typename To>
 struct is_convertible_impl
 {
-    enum { value =
-        (::boost::type_traits::ice_and<
-            ::boost::type_traits::ice_or<
-               ::boost::detail::is_convertible_basic_impl<From,To>::value,
-               ::boost::is_void<To>::value
-            >::value,
-            ::boost::type_traits::ice_not<
-               ::boost::is_array<To>::value
-            >::value,
-            ::boost::type_traits::ice_not<
-               ::boost::is_function<To>::value
-            >::value
-        >::value) };
+    enum { 
+       value = ( ::boost::detail::is_convertible_basic_impl<From,To>::value && ! ::boost::is_array<To>::value && ! ::boost::is_function<To>::value) 
+    };
 };
 #elif !defined(__BORLANDC__) || __BORLANDC__ > 0x551
 template <typename From, typename To>
 struct is_convertible_impl
 {
-    BOOST_STATIC_CONSTANT(bool, value =
-        (::boost::type_traits::ice_and<
-            ::boost::type_traits::ice_or<
-               ::boost::detail::is_convertible_basic_impl<From,To>::value,
-               ::boost::is_void<To>::value
-            >::value,
-            ::boost::type_traits::ice_not<
-               ::boost::is_array<To>::value
-            >::value,
-            ::boost::type_traits::ice_not<
-               ::boost::is_function<To>::value
-            >::value
-        >::value)
-        );
+   BOOST_STATIC_CONSTANT(bool, value = ( ::boost::detail::is_convertible_basic_impl<From, To>::value && !::boost::is_array<To>::value && !::boost::is_function<To>::value));
 };
 #endif
 
@@ -443,52 +434,55 @@ struct is_convertible_impl_dispatch
 // implementation above:
 //
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-#   define TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1,spec2,value) \
-    BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2,value) \
-    BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2 const,value) \
-    BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2 volatile,value) \
-    BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2 const volatile,value) \
-    /**/
 
-#   define TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2(trait,spec1,spec2,value) \
-    TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1,spec2,value) \
-    TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1 const,spec2,value) \
-    TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1 volatile,spec2,value) \
-    TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1 const volatile,spec2,value) \
-    /**/
+template <> struct is_convertible_impl_dispatch<void, void> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void, void const> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void, void const volatile> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void, void volatile> : public true_type{};
+
+template <> struct is_convertible_impl_dispatch<void const, void> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void const, void const> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void const, void const volatile> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void const, void volatile> : public true_type{};
 
-    TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2(is_convertible,void,void,true)
+template <> struct is_convertible_impl_dispatch<void const volatile, void> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void const volatile, void const> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void const volatile, void const volatile> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void const volatile, void volatile> : public true_type{};
 
-#   undef TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2
-#   undef TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1
+template <> struct is_convertible_impl_dispatch<void volatile, void> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void volatile, void const> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void volatile, void const volatile> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void volatile, void volatile> : public true_type{};
 
 #else
-    BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(is_convertible,void,void,true)
+template <> struct is_convertible_impl_dispatch<void, void> : public true_type{};
 #endif // BOOST_NO_CV_VOID_SPECIALIZATIONS
 
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void,To,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void,false)
+template <class To> struct is_convertible_impl_dispatch<void, To> : public false_type{};
+template <class From> struct is_convertible_impl_dispatch<From, void> : public false_type{};
+
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void const,To,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void volatile,To,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void const volatile,To,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void const volatile,false)
+template <class To> struct is_convertible_impl_dispatch<void const, To> : public false_type{};
+template <class From> struct is_convertible_impl_dispatch<From, void const> : public false_type{};
+template <class To> struct is_convertible_impl_dispatch<void const volatile, To> : public false_type{};
+template <class From> struct is_convertible_impl_dispatch<From, void const volatile> : public false_type{};
+template <class To> struct is_convertible_impl_dispatch<void volatile, To> : public false_type{};
+template <class From> struct is_convertible_impl_dispatch<From, void volatile> : public false_type{};
 #endif
 
 } // namespace detail
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_convertible,From,To,(::boost::detail::is_convertible_impl_dispatch<From,To>::value))
+template <class From, class To> 
+struct is_convertible : public integral_constant<bool, ::boost::detail::is_convertible_impl_dispatch<From, To>::value> {};
 
 #else
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_convertible,From,To,BOOST_IS_CONVERTIBLE(From,To))
+template <class From, class To>
+struct is_convertible : public integral_constant<bool, BOOST_IS_CONVERTIBLE(From, To)> {};
 
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED
index 48af81884941a18435cfa012fa2f0810f74dd7db..76afdda5ddcb4b5e794aed24dc04c837abccb7cd 100644 (file)
@@ -18,7 +18,7 @@
    && !defined(BOOST_INTEL_CXX_VERSION) && \
       !(defined(BOOST_MSVC) && _MSC_VER == 1800)
 #define BOOST_TT_CXX11_IS_COPY_ASSIGNABLE
-#include <boost/utility/declval.hpp>
+#include <boost/type_traits/declval.hpp>
 #else
    //For compilers without decltype
    #include <boost/type_traits/is_const.hpp>
    #include <boost/type_traits/remove_reference.hpp>
 #endif
 
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 namespace boost {
 
 namespace detail{
@@ -132,16 +128,14 @@ struct is_copy_assignable_impl {
 
 } // namespace detail
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_copy_assignable,T,::boost::detail::is_copy_assignable_impl<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_copy_assignable,void,false)
+template <class T> struct is_copy_assignable : public integral_constant<bool, ::boost::detail::is_copy_assignable_impl<T>::value>{};
+template <> struct is_copy_assignable<void> : public false_type{};
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_copy_assignable,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_copy_assignable,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_copy_assignable,void volatile,false)
+template <> struct is_copy_assignable<void const> : public false_type{};
+template <> struct is_copy_assignable<void const volatile> : public false_type{};
+template <> struct is_copy_assignable<void volatile> : public false_type{};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_COPY_ASSIGNABLE_HPP_INCLUDED
index 24f5eebc27ab476d861913869cccbe2c45181ec2..c68826431b07c033eadf6ff698342d8fa41cde50 100644 (file)
 #define BOOST_TT_IS_COPY_CONSTRUCTIBLE_HPP_INCLUDED
 
 #include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40900)
+
+#include <boost/type_traits/is_constructible.hpp>
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1800)
+
+namespace boost {
+
+template <class T> struct is_copy_constructible : public boost::is_constructible<T, const T&>{};
+
+template <> struct is_copy_constructible<void> : public false_type{};
+template <> struct is_copy_constructible<void const> : public false_type{};
+template <> struct is_copy_constructible<void const volatile> : public false_type{};
+template <> struct is_copy_constructible<void volatile> : public false_type{};
+
+} // namespace boost
+
+#else
+//
+// Special version for VC12 which has a problem when a base class (such as non_copyable) has a deleted
+// copy constructor.  In this case the compiler thinks there really is a copy-constructor and tries to
+// instantiate the deleted member.  std::is_copy_constructible has the same issue (or at least returns
+// an incorrect value, which just defers the issue into the users code) as well.  We can at least fix
+// boost::non_copyable as a base class as a special case:
+//
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/noncopyable.hpp>
+
+namespace boost {
+
+   namespace detail
+   {
+
+      template <class T, bool b> struct is_copy_constructible_imp : public boost::is_constructible<T, const T&>{};
+      template <class T> struct is_copy_constructible_imp<T, true> : public false_type{};
+
+   }
+
+   template <class T> struct is_copy_constructible : public detail::is_copy_constructible_imp<T, is_base_and_derived<boost::noncopyable, T>::value>{};
+
+   template <> struct is_copy_constructible<void> : public false_type{};
+   template <> struct is_copy_constructible<void const> : public false_type{};
+   template <> struct is_copy_constructible<void const volatile> : public false_type{};
+   template <> struct is_copy_constructible<void volatile> : public false_type{};
+
+} // namespace boost
+
+#endif
+
+#else
+
 #include <boost/type_traits/detail/yes_no_type.hpp>
 #include <boost/type_traits/is_base_and_derived.hpp>
 #include <boost/type_traits/add_reference.hpp>
 #include <boost/type_traits/is_rvalue_reference.hpp>
-#include <boost/utility/declval.hpp>
+#include <boost/type_traits/declval.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/declval.hpp>
 #include <boost/noncopyable.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4181)
+#endif
 
 namespace boost {
 
-namespace detail{
+   namespace detail{
 
-template <bool DerivedFromNoncopyable, class T>
-struct is_copy_constructible_impl2 {
+      template <bool DerivedFromNoncopyable, class T>
+      struct is_copy_constructible_impl2 {
 
-// Intel compiler has problems with SFINAE for copy constructors and deleted functions:
-//
-// error: function *function_name* cannot be referenced -- it is a deleted function
-// static boost::type_traits::yes_type test(T1&, decltype(T1(boost::declval<T1&>()))* = 0);
-//                                                        ^ 
-//
-// MSVC 12.0 (Visual 2013) has problems when the copy constructor has been deleted. See:
-// https://connect.microsoft.com/VisualStudio/feedback/details/800328/std-is-copy-constructible-is-broken
+         // Intel compiler has problems with SFINAE for copy constructors and deleted functions:
+         //
+         // error: function *function_name* cannot be referenced -- it is a deleted function
+         // static boost::type_traits::yes_type test(T1&, decltype(T1(boost::declval<T1&>()))* = 0);
+         //                                                        ^ 
+         //
+         // MSVC 12.0 (Visual 2013) has problems when the copy constructor has been deleted. See:
+         // https://connect.microsoft.com/VisualStudio/feedback/details/800328/std-is-copy-constructible-is-broken
 #if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_INTEL_CXX_VERSION) && !(defined(BOOST_MSVC) && _MSC_VER == 1800)
 
 #ifdef BOOST_NO_CXX11_DECLTYPE
-    template <class T1>
-    static boost::type_traits::yes_type test(T1&, boost::mpl::int_<sizeof(T1(boost::declval<T1&>()))>* = 0);
+         template <class T1>
+         static boost::type_traits::yes_type test(const T1&, boost::mpl::int_<sizeof(T1(boost::declval<const T1&>()))>* = 0);
 #else
-    template <class T1>
-    static boost::type_traits::yes_type test(T1&, decltype(T1(boost::declval<T1&>()))* = 0);
+         template <class T1>
+         static boost::type_traits::yes_type test(const T1&, decltype(T1(boost::declval<const T1&>()))* = 0);
 #endif
 
-    static boost::type_traits::no_type test(...);
+         static boost::type_traits::no_type test(...);
 #else
-    template <class T1>
-    static boost::type_traits::no_type test(T1&, typename T1::boost_move_no_copy_constructor_or_assign* = 0);
-    static boost::type_traits::yes_type test(...);
+         template <class T1>
+         static boost::type_traits::no_type test(const T1&, typename T1::boost_move_no_copy_constructor_or_assign* = 0);
+         static boost::type_traits::yes_type test(...);
 #endif
 
-    // If you see errors like this:
-    //
-    //      `'T::T(const T&)' is private`
-    //      `boost/type_traits/is_copy_constructible.hpp:68:5: error: within this context`
-    //
-    // then you are trying to call that macro for a structure defined like that:
-    //
-    //      struct T {
-    //          ...
-    //      private:
-    //          T(const T &);
-    //          ...
-    //      };
-    //
-    // To fix that you must modify your structure:
-    //
-    //      // C++03 and C++11 version
-    //      struct T: private boost::noncopyable {
-    //          ...
-    //      private:
-    //          T(const T &);
-    //          ...
-    //      };
-    //
-    //      // C++11 version
-    //      struct T {
-    //          ...
-    //      private:
-    //          T(const T &) = delete;
-    //          ...
-    //      };
-    BOOST_STATIC_CONSTANT(bool, value = (
+         // If you see errors like this:
+         //
+         //      `'T::T(const T&)' is private`
+         //      `boost/type_traits/is_copy_constructible.hpp:68:5: error: within this context`
+         //
+         // then you are trying to call that macro for a structure defined like that:
+         //
+         //      struct T {
+         //          ...
+         //      private:
+         //          T(const T &);
+         //          ...
+         //      };
+         //
+         // To fix that you must modify your structure:
+         //
+         //      // C++03 and C++11 version
+         //      struct T: private boost::noncopyable {
+         //          ...
+         //      private:
+         //          T(const T &);
+         //          ...
+         //      };
+         //
+         //      // C++11 version
+         //      struct T {
+         //          ...
+         //      private:
+         //          T(const T &) = delete;
+         //          ...
+         //      };
+         BOOST_STATIC_CONSTANT(bool, value = (
             sizeof(test(
-                boost::declval<BOOST_DEDUCED_TYPENAME boost::add_reference<T>::type>()
+            boost::declval<BOOST_DEDUCED_TYPENAME boost::add_reference<T const>::type>()
             )) == sizeof(boost::type_traits::yes_type)
-        ||
-            boost::is_rvalue_reference<T>::value
-    ));
-};
-
-template <class T>
-struct is_copy_constructible_impl2<true, T> {
-    BOOST_STATIC_CONSTANT(bool, value = false);
-};
-
-template <class T>
-struct is_copy_constructible_impl {
-
-    BOOST_STATIC_CONSTANT(bool, value = (
-        boost::detail::is_copy_constructible_impl2<
+            &&
+            !boost::is_rvalue_reference<T>::value
+            && !boost::is_array<T>::value
+            ));
+      };
+
+      template <class T>
+      struct is_copy_constructible_impl2<true, T> {
+         BOOST_STATIC_CONSTANT(bool, value = false);
+      };
+
+      template <class T>
+      struct is_copy_constructible_impl {
+
+         BOOST_STATIC_CONSTANT(bool, value = (
+            boost::detail::is_copy_constructible_impl2<
             boost::is_base_and_derived<boost::noncopyable, T>::value,
             T
-        >::value
-    ));
-};
+            >::value
+            ));
+      };
 
-} // namespace detail
+   } // namespace detail
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_copy_constructible,T,::boost::detail::is_copy_constructible_impl<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_copy_constructible,void,false)
+   template <class T> struct is_copy_constructible : public integral_constant<bool, ::boost::detail::is_copy_constructible_impl<T>::value>{};
+   template <> struct is_copy_constructible<void> : public false_type{};
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_copy_constructible,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_copy_constructible,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_copy_constructible,void volatile,false)
+   template <> struct is_copy_constructible<void const> : public false_type{};
+   template <> struct is_copy_constructible<void volatile> : public false_type{};
+   template <> struct is_copy_constructible<void const volatile> : public false_type{};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif
 
 #endif // BOOST_TT_IS_COPY_CONSTRUCTIBLE_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/is_default_constructible.hpp b/3rdparty/boost/boost/type_traits/is_default_constructible.hpp
new file mode 100644 (file)
index 0000000..7fd63f8
--- /dev/null
@@ -0,0 +1,64 @@
+
+//  (C) Copyright John Maddock 2015.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_DEFAULT_CONSTRUCTIBLE_HPP_INCLUDED
+#define BOOST_TT_IS_DEFAULT_CONSTRUCTIBLE_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40500)
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+
+namespace boost{
+
+   namespace detail{
+
+      struct is_default_constructible_imp
+      {
+         template<typename _Tp, typename = decltype(_Tp())>
+         static boost::type_traits::yes_type test(int);
+
+         template<typename>
+         static boost::type_traits::no_type test(...);
+      };
+
+   }
+
+   template <class T> struct is_default_constructible : public integral_constant<bool, sizeof(detail::is_default_constructible_imp::test<T>(0)) == sizeof(boost::type_traits::yes_type)>{};
+   template <class T, std::size_t N> struct is_default_constructible<T[N]> : public is_default_constructible<T>{};
+   template <class T> struct is_default_constructible<T[]> : public is_default_constructible<T>{};
+   template <class T> struct is_default_constructible<T&> : public integral_constant<bool, false>{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) 
+   template <class T> struct is_default_constructible<T&&> : public integral_constant<bool, false>{};
+#endif
+   template <> struct is_default_constructible<void> : public integral_constant<bool, false>{};
+   template <> struct is_default_constructible<void const> : public integral_constant<bool, false>{};
+   template <> struct is_default_constructible<void volatile> : public integral_constant<bool, false>{};
+   template <> struct is_default_constructible<void const volatile> : public integral_constant<bool, false>{};
+
+#else
+
+#include <boost/type_traits/is_pod.hpp>
+
+namespace boost{
+
+   // We don't know how to implement this, note we can not use has_trivial_constructor here
+   // because the correct implementation of that trait requires this one:
+   template <class T> struct is_default_constructible : public is_pod<T>{};
+   template <> struct is_default_constructible<void> : public integral_constant<bool, false>{};
+   template <> struct is_default_constructible<void const> : public integral_constant<bool, false>{};
+   template <> struct is_default_constructible<void volatile> : public integral_constant<bool, false>{};
+   template <> struct is_default_constructible<void const volatile> : public integral_constant<bool, false>{};
+
+#endif
+
+} // namespace boost
+
+#endif // BOOST_TT_IS_DEFAULT_CONSTRUCTIBLE_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/is_destructible.hpp b/3rdparty/boost/boost/type_traits/is_destructible.hpp
new file mode 100644 (file)
index 0000000..9f1e5d9
--- /dev/null
@@ -0,0 +1,60 @@
+
+//  (C) Copyright John Maddock 2015.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_DESTRUCTIBLE_HPP_INCLUDED
+#define BOOST_TT_IS_DESTRUCTIBLE_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800)
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/declval.hpp>
+
+namespace boost{
+
+   namespace detail{
+
+      struct is_destructible_imp
+      {
+         template<typename T, typename = decltype(boost::declval<T&>().~T())>
+         static boost::type_traits::yes_type test(int);
+         template<typename>
+         static boost::type_traits::no_type test(...);
+      };
+
+   }
+
+   template <class T> struct is_destructible : public integral_constant<bool, sizeof(detail::is_destructible_imp::test<T>(0)) == sizeof(boost::type_traits::yes_type)>{};
+
+#else
+
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/is_class.hpp>
+
+namespace boost{
+
+   // We don't know how to implement this:
+   template <class T> struct is_destructible : public integral_constant<bool, is_pod<T>::value || is_class<T>::value>{};
+#endif
+
+   template <> struct is_destructible<void> : public false_type{};
+   template <> struct is_destructible<void const> : public false_type{};
+   template <> struct is_destructible<void volatile> : public false_type{};
+   template <> struct is_destructible<void const volatile> : public false_type{};
+   template <class T> struct is_destructible<T&> : public is_destructible<T>{};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+   template <class T> struct is_destructible<T&&> : public is_destructible<T>{};
+#endif
+   template <class T, std::size_t N> struct is_destructible<T[N]> : public is_destructible<T>{};
+   template <class T> struct is_destructible<T[]> : public is_destructible<T>{};
+
+} // namespace boost
+
+#endif // BOOST_TT_IS_DESTRUCTIBLE_HPP_INCLUDED
index adb239ee24fe8e23be776036607eadb811ce8762..ef288c518b148ca686a254d96d4fbcefaddd1f23 100644 (file)
 #define BOOST_TT_IS_EMPTY_HPP_INCLUDED
 
 #include <boost/type_traits/is_convertible.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/detail/config.hpp>
 #include <boost/type_traits/intrinsics.hpp>
 
-#   include <boost/type_traits/remove_cv.hpp>
-#   include <boost/type_traits/is_class.hpp>
-#   include <boost/type_traits/add_reference.hpp>
-
-// should be always the last #include directive
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/add_reference.hpp>
 
 #ifndef BOOST_INTERNAL_IS_EMPTY
 #define BOOST_INTERNAL_IS_EMPTY(T) false
@@ -75,12 +71,8 @@ struct is_empty_impl
 {
     typedef typename remove_cv<T>::type cvt;
     BOOST_STATIC_CONSTANT(
-        bool, value = (
-            ::boost::type_traits::ice_or<
-              ::boost::detail::empty_helper<cvt,::boost::is_class<T>::value>::value
-              , BOOST_INTERNAL_IS_EMPTY(cvt)
-            >::value
-            ));
+        bool, 
+        value = ( ::boost::detail::empty_helper<cvt,::boost::is_class<T>::value>::value || BOOST_INTERNAL_IS_EMPTY(cvt)));
 };
 
 #else // __BORLANDC__
@@ -107,35 +99,21 @@ struct is_empty_impl
 
    BOOST_STATIC_CONSTANT(
        bool, value = (
-           ::boost::type_traits::ice_or<
               ::boost::detail::empty_helper<
                   cvt
                 , ::boost::is_class<T>::value
                 , ::boost::is_convertible< r_type,int>::value
-              >::value
-              , BOOST_INTERNAL_IS_EMPTY(cvt)
-           >::value));
+              >::value || BOOST_INTERNAL_IS_EMPTY(cvt));
 };
 
 #endif // __BORLANDC__
 
-
-// these help when the compiler has no partial specialization support:
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_empty,void,false)
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_empty,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_empty,void volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_empty,void const volatile,false)
-#endif
-
 } // namespace detail
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_empty,T,::boost::detail::is_empty_impl<T>::value)
+template <class T> struct is_empty : integral_constant<bool, ::boost::detail::is_empty_impl<T>::value> {};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #undef BOOST_INTERNAL_IS_EMPTY
 
 #endif // BOOST_TT_IS_EMPTY_HPP_INCLUDED
index 7929c962a5b514fe0cb1f818d805c227325250fd..eada480a658784ec619a7636fa052438868bf47a 100644 (file)
@@ -12,6 +12,7 @@
 #define BOOST_TT_IS_ENUM_HPP_INCLUDED
 
 #include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 #ifndef BOOST_IS_ENUM
 #include <boost/type_traits/add_reference.hpp>
 #include <boost/type_traits/is_arithmetic.hpp>
 #ifdef __GNUC__
 #include <boost/type_traits/is_function.hpp>
 #endif
-#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/detail/config.hpp>
 #if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) 
 #  include <boost/type_traits/is_class.hpp>
 #  include <boost/type_traits/is_union.hpp>
 #endif
 #endif
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 namespace boost {
 
 #ifndef BOOST_IS_ENUM
@@ -43,11 +41,7 @@ namespace detail {
 template <typename T>
 struct is_class_or_union
 {
-   BOOST_STATIC_CONSTANT(bool, value =
-      (::boost::type_traits::ice_or<
-           ::boost::is_class<T>::value
-         , ::boost::is_union<T>::value
-      >::value));
+   BOOST_STATIC_CONSTANT(bool, value = ::boost::is_class<T>::value || ::boost::is_union<T>::value);
 };
 
 #else
@@ -94,8 +88,8 @@ template <>
 struct is_enum_helper<false>
 {
     template <typename T> struct type
-       : public ::boost::is_convertible<typename boost::add_reference<T>::type,::boost::detail::int_convertible>
     {
+       static const bool value = ::boost::is_convertible<typename boost::add_reference<T>::type, ::boost::detail::int_convertible>::value;
     };
 };
 
@@ -112,34 +106,28 @@ template <typename T> struct is_enum_impl
    // order to correctly deduce that noncopyable types are not enums
    // (dwa 2002/04/15)...
    BOOST_STATIC_CONSTANT(bool, selector =
-      (::boost::type_traits::ice_or<
            ::boost::is_arithmetic<T>::value
-         , ::boost::is_reference<T>::value
-         , ::boost::is_function<T>::value
-         , is_class_or_union<T>::value
-         , is_array<T>::value
-      >::value));
+         || ::boost::is_reference<T>::value
+         || ::boost::is_function<T>::value
+         || is_class_or_union<T>::value
+         || is_array<T>::value);
 #else
    // ...however, not checking is_class_or_union on non-conforming
    // compilers prevents a dependency recursion.
    BOOST_STATIC_CONSTANT(bool, selector =
-      (::boost::type_traits::ice_or<
            ::boost::is_arithmetic<T>::value
-         , ::boost::is_reference<T>::value
-         , ::boost::is_function<T>::value
-         , is_array<T>::value
-      >::value));
+         || ::boost::is_reference<T>::value
+         || ::boost::is_function<T>::value
+         || is_array<T>::value);
 #endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
 
 #else // !defined(__GNUC__):
     
    BOOST_STATIC_CONSTANT(bool, selector =
-      (::boost::type_traits::ice_or<
            ::boost::is_arithmetic<T>::value
-         , ::boost::is_reference<T>::value
-         , is_class_or_union<T>::value
-         , is_array<T>::value
-      >::value));
+         || ::boost::is_reference<T>::value
+         || is_class_or_union<T>::value
+         || is_array<T>::value);
     
 #endif
 
@@ -155,34 +143,24 @@ template <typename T> struct is_enum_impl
     BOOST_STATIC_CONSTANT(bool, value = helper::value);
 };
 
-// these help on compilers with no partial specialization support:
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void,false)
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void const volatile,false)
-#endif
-
 } // namespace detail
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,::boost::detail::is_enum_impl<T>::value)
+template <class T> struct is_enum : public integral_constant<bool, ::boost::detail::is_enum_impl<T>::value> {};
 
 #else // __BORLANDC__
 //
 // buggy is_convertible prevents working
 // implementation of is_enum:
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,false)
+template <class T> struct is_enum : public integral_constant<bool, false> {};
 
 #endif
 
 #else // BOOST_IS_ENUM
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,BOOST_IS_ENUM(T))
+template <class T> struct is_enum : public integral_constant<bool, BOOST_IS_ENUM(T)> {};
 
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_ENUM_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/is_final.hpp b/3rdparty/boost/boost/type_traits/is_final.hpp
new file mode 100644 (file)
index 0000000..410d186
--- /dev/null
@@ -0,0 +1,30 @@
+
+//  Copyright (c) 2014 Agustin Berge
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_FINAL_HPP_INCLUDED
+#define BOOST_TT_IS_FINAL_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#ifdef BOOST_IS_FINAL
+#include <boost/type_traits/remove_cv.hpp>
+#endif
+
+namespace boost {
+
+#ifdef BOOST_IS_FINAL
+template <class T> struct is_final : public integral_constant<bool, BOOST_IS_FINAL(typename remove_cv<T>::type)> {};
+#else
+template <class T> struct is_final : public integral_constant<bool, false> {};
+#endif
+
+} // namespace boost
+
+#endif // BOOST_TT_IS_FINAL_HPP_INCLUDED
index 25d16f180030f676980146689da5029125b51134..7bf7d1f8207f6bac08740f48a0dd688fbe969494 100644 (file)
@@ -1,4 +1,3 @@
-
 //  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
 //  Use, modification and distribution are subject to the Boost Software License,
 //  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 #define BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED
 
 // should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
 
 namespace boost {
 
 //* is a type T a floating-point type described in the standard (3.9.1p8)
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_float,T,false)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_float,float,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_float,double,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_float,long double,true)
-
+   template <class T> struct is_float : public is_floating_point<T> {};
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED
old mode 100755 (executable)
new mode 100644 (file)
index 2224453..196c900
@@ -1,4 +1,3 @@
-
 //  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000-2005.
 //  Use, modification and distribution are subject to the Boost Software License,
 //  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -9,19 +8,23 @@
 #ifndef BOOST_TYPE_TRAITS_IS_FLOATING_HPP_INCLUDED
 #define BOOST_TYPE_TRAITS_IS_FLOATING_HPP_INCLUDED
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
 
 //* is a type T a floating-point type described in the standard (3.9.1p8)
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_floating_point,T,false)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_floating_point,float,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_floating_point,double,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_floating_point,long double,true)
+   template <class T> struct is_floating_point : public false_type{};
+   template <class T> struct is_floating_point<const T> : public is_floating_point<T>{};
+   template <class T> struct is_floating_point<volatile const T> : public is_floating_point<T>{};
+   template <class T> struct is_floating_point<volatile T> : public is_floating_point<T>{};
+   template<> struct is_floating_point<float> : public true_type{};
+   template<> struct is_floating_point<double> : public true_type{};
+   template<> struct is_floating_point<long double> : public true_type{};
+   
+#if defined(BOOST_HAS_FLOAT128)
+   template<> struct is_floating_point<__float128> : public true_type{};
+#endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED
index eeb4382010ee07f20d30d3db46aa8cf45f3a1402..f77c1f0469d14b434ca060526320b594b946c705 100644 (file)
@@ -12,8 +12,7 @@
 #define BOOST_TT_IS_FUNCTION_HPP_INCLUDED
 
 #include <boost/type_traits/is_reference.hpp>
-#include <boost/type_traits/detail/false_result.hpp>
-#include <boost/config.hpp>
+#include <boost/type_traits/detail/config.hpp>
 
 #if !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
 #   include <boost/type_traits/detail/is_function_ptr_helper.hpp>
@@ -22,9 +21,6 @@
 #   include <boost/type_traits/detail/yes_no_type.hpp>
 #endif
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 // is a type a function?
 // Please note that this implementation is unnecessarily complex:
 // we could just use !is_convertible<T*, const volatile void*>::value,
@@ -40,17 +36,16 @@ namespace detail {
 #if !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
 template<bool is_ref = true>
 struct is_function_chooser
-    : public ::boost::type_traits::false_result
 {
+   template< typename T > struct result_
+      : public false_type {};
 };
 
 template <>
 struct is_function_chooser<false>
 {
     template< typename T > struct result_
-        : public ::boost::type_traits::is_function_ptr_helper<T*>
-    {
-    };
+        : public ::boost::type_traits::is_function_ptr_helper<T*> {};
 };
 
 template <typename T>
@@ -95,15 +90,13 @@ struct is_function_impl<T&&> : public false_type
 #endif // !defined( __CODEGEARC__ )
 
 #if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_function,T,__is_function(T))
+template <class T> struct is_function : integral_constant<bool, __is_function(T)> {};
 #else
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_function,T,::boost::detail::is_function_impl<T>::value)
+template <class T> struct is_function : integral_constant<bool, ::boost::detail::is_function_impl<T>::value> {};
 #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_function,T&&,false)
+template <class T> struct is_function<T&&> : public false_type {};
 #endif
 #endif
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_FUNCTION_HPP_INCLUDED
index 138e29688763462ef976706f322e72136d2cf015..f58767a489012f01babfd2398c0e2e13e9d8c516 100644 (file)
 
 #include <boost/type_traits/is_arithmetic.hpp>
 #include <boost/type_traits/is_void.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
 
 namespace boost {
 
-namespace detail {
-
-template <typename T> 
-struct is_fundamental_impl
-    : public ::boost::type_traits::ice_or< 
-          ::boost::is_arithmetic<T>::value
-        , ::boost::is_void<T>::value
-        >
-{ 
-};
-
-} // namespace detail
-
 //* is a type T a fundamental type described in the standard (3.9.1)
 #if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_fundamental,T,__is_fundamental(T))
+template <class T> struct is_fundamental : public integral_constant<bool, __is_fundamental(T)> {};
 #else
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_fundamental,T,::boost::detail::is_fundamental_impl<T>::value)
+template <class T> struct is_fundamental : public integral_constant<bool, ::boost::is_arithmetic<T>::value || ::boost::is_void<T>::value> {};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_FUNDAMENTAL_HPP_INCLUDED
index 6bfad49d395a5876dde7e8ac47e1dd87f78fe8e3..7a7e54bb701920ad49200ab6ee7b19352474abb0 100644 (file)
 #define BOOST_TT_IS_INTEGRAL_HPP_INCLUDED
 
 #include <boost/config.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
 
-//* is a type T an [cv-qualified-] integral type described in the standard (3.9.1p3)
-// as an extension we include long long, as this is likely to be added to the
-// standard at a later date
 #if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_integral,T,__is_integral(T))
+   template <class T>
+   struct is_integral : public integral_constant<bool, __is_integral(T)> {};
 #else
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_integral,T,false)
 
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned char,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned short,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned int,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned long,true)
+template <class T> struct is_integral : public false_type {};
+template <class T> struct is_integral<const T> : public is_integral<T> {};
+template <class T> struct is_integral<volatile const T> : public is_integral<T>{};
+template <class T> struct is_integral<volatile T> : public is_integral<T>{};
 
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed char,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed short,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed int,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed long,true)
+//* is a type T an [cv-qualified-] integral type described in the standard (3.9.1p3)
+// as an extension we include long long, as this is likely to be added to the
+// standard at a later date
+template<> struct is_integral<unsigned char> : public true_type {};
+template<> struct is_integral<unsigned short> : public true_type{};
+template<> struct is_integral<unsigned int> : public true_type{};
+template<> struct is_integral<unsigned long> : public true_type{};
 
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,bool,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,char,true)
+template<> struct is_integral<signed char> : public true_type{};
+template<> struct is_integral<short> : public true_type{};
+template<> struct is_integral<int> : public true_type{};
+template<> struct is_integral<long> : public true_type{};
+
+template<> struct is_integral<char> : public true_type{};
+template<> struct is_integral<bool> : public true_type{};
 
 #ifndef BOOST_NO_INTRINSIC_WCHAR_T
 // If the following line fails to compile and you're using the Intel
 // compiler, see http://lists.boost.org/MailArchives/boost-users/msg06567.php,
 // and define BOOST_NO_INTRINSIC_WCHAR_T on the command line.
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,wchar_t,true)
+template<> struct is_integral<wchar_t> : public true_type{};
 #endif
 
 // Same set of integral types as in boost/type_traits/integral_promotion.hpp.
 // Please, keep in sync. -- Alexander Nasonov
 #if (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \
     || (defined(__BORLANDC__) && (__BORLANDC__ == 0x600) && (_MSC_VER < 1300))
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int8,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int8,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int16,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int16,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int32,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int32,true)
+template<> struct is_integral<unsigned __int8> : public true_type{};
+template<> struct is_integral<unsigned __int16> : public true_type{};
+template<> struct is_integral<unsigned __int32> : public true_type{};
+template<> struct is_integral<__int8> : public true_type{};
+template<> struct is_integral<__int16> : public true_type{};
+template<> struct is_integral<__int32> : public true_type{};
 #ifdef __BORLANDC__
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int64,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int64,true)
+template<> struct is_integral<unsigned __int64> : public true_type{};
+template<> struct is_integral<__int64> : public true_type{};
 #endif
 #endif
 
 # if defined(BOOST_HAS_LONG_LONG)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral, ::boost::ulong_long_type,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral, ::boost::long_long_type,true)
+template<> struct is_integral< ::boost::ulong_long_type> : public true_type{};
+template<> struct is_integral< ::boost::long_long_type> : public true_type{};
 #elif defined(BOOST_HAS_MS_INT64)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int64,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int64,true)
+template<> struct is_integral<unsigned __int64> : public true_type{};
+template<> struct is_integral<__int64> : public true_type{};
 #endif
         
 #ifdef BOOST_HAS_INT128
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,boost::int128_type,true)
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,boost::uint128_type,true)
+template<> struct is_integral<boost::int128_type> : public true_type{};
+template<> struct is_integral<boost::uint128_type> : public true_type{};
 #endif
 #ifndef BOOST_NO_CXX11_CHAR16_T
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,char16_t,true)
+template<> struct is_integral<char16_t> : public true_type{};
 #endif
 #ifndef BOOST_NO_CXX11_CHAR32_T
-BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,char32_t,true)
+template<> struct is_integral<char32_t> : public true_type{};
 #endif
 
 #endif  // non-CodeGear implementation
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_INTEGRAL_HPP_INCLUDED
index 0b0130ab2df23420d89a752686b0ced876f8ec67..e94d78748175f82f4fa5a2b4cec6da9338be9954 100644 (file)
 #ifndef BOOST_TT_IS_LVALUE_REFERENCE_HPP_INCLUDED
 #define BOOST_TT_IS_LVALUE_REFERENCE_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
-
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
 
 #if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,__is_reference(T))
+   template <class T> struct is_lvalue_reference : public integral_constant<bool, __is_reference(T)>{};
 #else
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T&,true)
+   template <class T> struct is_lvalue_reference : public false_type{};
+   template <class T> struct is_lvalue_reference<T&> : public true_type{};
 
 #if  defined(BOOST_ILLEGAL_CV_REFERENCES)
 // these are illegal specialisations; cv-qualifies applied to
 // references have no effect according to [8.3.2p1],
 // C++ Builder requires them though as it treats cv-qualified
 // references as distinct types...
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T& const,true)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T& volatile,true)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T& const volatile,true)
+   template <class T> struct is_lvalue_reference<T&const> : public true_type{};
+   template <class T> struct is_lvalue_reference<T&volatile> : public true_type{};
+   template <class T> struct is_lvalue_reference<T&const volatile> : public true_type{};
 #endif
 
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED
 
index d1c3690ba70dc3932eae479ac6d422fed4348848..223197f333e716f22946679b42aa422b34b10a1d 100644 (file)
@@ -11,7 +11,7 @@
 #ifndef BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
 #define BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/detail/config.hpp>
 #include <boost/detail/workaround.hpp>
 
 #if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
    //
 #   include <boost/type_traits/detail/is_mem_fun_pointer_impl.hpp>
 #   include <boost/type_traits/remove_cv.hpp>
+#   include <boost/type_traits/integral_constant.hpp>
 #else
 #   include <boost/type_traits/is_reference.hpp>
 #   include <boost/type_traits/is_array.hpp>
 #   include <boost/type_traits/detail/yes_no_type.hpp>
-#   include <boost/type_traits/detail/false_result.hpp>
-#   include <boost/type_traits/detail/ice_or.hpp>
 #   include <boost/type_traits/detail/is_mem_fun_pointer_tester.hpp>
 #endif
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 namespace boost {
 
 #if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_function_pointer,T,__is_member_function_pointer( T ))
+template <class T> struct is_member_function_pointer : public integral_constant<bool, __is_member_function_pointer( T )> {};
 #elif !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(
-      is_member_function_pointer
-    , T
-    , ::boost::type_traits::is_mem_fun_pointer_impl<typename remove_cv<T>::type>::value
-    )
+template <class T> struct is_member_function_pointer 
+   : public ::boost::integral_constant<bool, ::boost::type_traits::is_mem_fun_pointer_impl<typename remove_cv<T>::type>::value>{};
 
 #else
 
@@ -54,8 +47,8 @@ namespace detail {
 
 template <bool>
 struct is_mem_fun_pointer_select
-    : public ::boost::type_traits::false_result
 {
+   template <class T> struct result_ : public false_type{};
 };
 
 template <>
@@ -82,14 +75,8 @@ struct is_mem_fun_pointer_select<false>
 
 template <typename T>
 struct is_member_function_pointer_impl
-    : public is_mem_fun_pointer_select<
-          ::boost::type_traits::ice_or<
-              ::boost::is_reference<T>::value
-            , ::boost::is_array<T>::value
-            >::value
-        >::template result_<T>
-{
-};
+    : public is_mem_fun_pointer_select< 
+      ::boost::is_reference<T>::value || ::boost::is_array<T>::value>::template result_<T>{};
 
 template <typename T>
 struct is_member_function_pointer_impl<T&> : public false_type{};
@@ -113,21 +100,21 @@ struct is_member_function_pointer_impl<T&>
 
 #endif
 
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void,false)
+template<> struct is_member_function_pointer_impl<void> : public false_type{};
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void const volatile,false)
+template<> struct is_member_function_pointer_impl<void const> : public false_type{};
+template<> struct is_member_function_pointer_impl<void const volatile> : public false_type{};
+template<> struct is_member_function_pointer_impl<void volatile> : public false_type{};
 #endif
 
 } // namespace detail
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_function_pointer,T,::boost::detail::is_member_function_pointer_impl<T>::value)
+template <class T>
+struct is_member_function_pointer
+   : public integral_constant<bool, ::boost::detail::is_member_function_pointer_impl<T>::value>{};
 
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
old mode 100755 (executable)
new mode 100644 (file)
index 66b76c9..cb7cf14
 #ifndef BOOST_TT_IS_MEMBER_OBJECT_POINTER_HPP_INCLUDED
 #define BOOST_TT_IS_MEMBER_OBJECT_POINTER_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
 #include <boost/type_traits/is_member_pointer.hpp>
 #include <boost/type_traits/is_member_function_pointer.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/type_traits/detail/ice_not.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
 
 namespace boost {
 
-namespace detail{
-
-template <typename T>
-struct is_member_object_pointer_impl
-{
-   BOOST_STATIC_CONSTANT(
-      bool, value = (::boost::type_traits::ice_and<
-         ::boost::is_member_pointer<T>::value,
-         ::boost::type_traits::ice_not<
-            ::boost::is_member_function_pointer<T>::value
-         >::value
-      >::value ));
-};
-
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_object_pointer,T,::boost::detail::is_member_object_pointer_impl<T>::value)
+template <class T> struct is_member_object_pointer 
+   : public integral_constant<bool, 
+   ::boost::is_member_pointer<T>::value && !::boost::is_member_function_pointer<T>::value>{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
index cba31af0c25928fcd0e4a40f5ccfac1582b51777..9757afc950ae2dd54bf2348bfa54ca24da7a8112 100644 (file)
 #ifndef BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED
 #define BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
 #include <boost/detail/workaround.hpp>
-
-#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
-#   include <boost/type_traits/is_member_function_pointer.hpp>
-#else
-#   include <boost/type_traits/is_reference.hpp>
-#   include <boost/type_traits/is_array.hpp>
-#   include <boost/type_traits/detail/is_mem_fun_pointer_tester.hpp>
-#   include <boost/type_traits/detail/yes_no_type.hpp>
-#   include <boost/type_traits/detail/false_result.hpp>
-#   include <boost/type_traits/detail/ice_or.hpp>
-#endif
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
 
 namespace boost {
 
 #if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,__is_member_pointer(T))
-#elif BOOST_WORKAROUND(__BORLANDC__, < 0x600)
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*,true)
-
+template <class T> struct is_member_pointer : public integral_constant<bool, __is_member_pointer(T)>{};
 #else
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,::boost::is_member_function_pointer<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*,true)
+template <class T> struct is_member_pointer : public integral_constant<bool, ::boost::is_member_function_pointer<T>::value>{};
+template <class T, class U> struct is_member_pointer<U T::* > : public true_type{};
 
 #if !BOOST_WORKAROUND(__MWERKS__,<=0x3003) && !BOOST_WORKAROUND(__IBMCPP__, <=600)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*const,true)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*volatile,true)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*const volatile,true)
+template <class T, class U> struct is_member_pointer<U T::*const> : public true_type{};
+template <class T, class U> struct is_member_pointer<U T::*const volatile> : public true_type{};
+template <class T, class U> struct is_member_pointer<U T::*volatile> : public true_type{};
 #endif
 
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED
index 3268307cdf48eaf1d82162770692cc1bb284ff1c..9755430ecf4518ab142192ba7a7adc38e3cc2d47 100644 (file)
 #include <boost/type_traits/has_nothrow_assign.hpp>
 #include <boost/type_traits/is_array.hpp>
 #include <boost/type_traits/is_reference.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-#include <boost/type_traits/detail/ice_not.hpp>
 #include <boost/utility/enable_if.hpp>
-#include <boost/utility/declval.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/declval.hpp>
 
 namespace boost {
 
-namespace detail{
-
 #ifdef BOOST_IS_NOTHROW_MOVE_ASSIGN
 
 template <class T>
-struct is_nothrow_move_assignable_imp{ BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_NOTHROW_MOVE_ASSIGN(T)); };
-template <class T>
-struct is_nothrow_move_assignable_imp<T const>{ BOOST_STATIC_CONSTANT(bool, value = false); };
-template <class T>
-struct is_nothrow_move_assignable_imp<T volatile>{ BOOST_STATIC_CONSTANT(bool, value = false); };
-template <class T>
-struct is_nothrow_move_assignable_imp<T const volatile>{ BOOST_STATIC_CONSTANT(bool, value = false); };
-template <class T>
-struct is_nothrow_move_assignable_imp<T&>{ BOOST_STATIC_CONSTANT(bool, value = false); };
-template <class T>
-struct is_nothrow_move_assignable_imp<T&&>{ BOOST_STATIC_CONSTANT(bool, value = false); };
-
+struct is_nothrow_move_assignable : public integral_constant<bool, BOOST_IS_NOTHROW_MOVE_ASSIGN(T)>{};
+template <class T> struct is_nothrow_move_assignable<T const> : public false_type{};
+template <class T> struct is_nothrow_move_assignable<T volatile> : public false_type{};
+template <class T> struct is_nothrow_move_assignable<T const volatile> : public false_type{};
+template <class T> struct is_nothrow_move_assignable<T&> : public false_type{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) 
+template <class T> struct is_nothrow_move_assignable<T&&> : public false_type{};
+#endif
 
 #elif !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR)
 
+namespace detail{
+
 template <class T, class Enable = void>
 struct false_or_cpp11_noexcept_move_assignable: public ::boost::false_type {};
 
@@ -57,52 +47,35 @@ struct false_or_cpp11_noexcept_move_assignable <
     > : public ::boost::integral_constant<bool, BOOST_NOEXCEPT_EXPR(::boost::declval<T&>() = ::boost::declval<T>())>
 {};
 
-template <class T>
-struct is_nothrow_move_assignable_imp{
-    BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::false_or_cpp11_noexcept_move_assignable<T>::value);
-};
+}
 
 template <class T>
-struct is_nothrow_move_assignable_imp<T const> : public ::boost::false_type {};
-template <class T>
-struct is_nothrow_move_assignable_imp<T volatile> : public ::boost::false_type{};
-template <class T>
-struct is_nothrow_move_assignable_imp<T const volatile> : public ::boost::false_type{};
-template <class T>
-struct is_nothrow_move_assignable_imp<T&> : public ::boost::false_type{};
+struct is_nothrow_move_assignable : public integral_constant<bool, ::boost::detail::false_or_cpp11_noexcept_move_assignable<T>::value>{};
+
+template <class T> struct is_nothrow_move_assignable<T const> : public ::boost::false_type {};
+template <class T> struct is_nothrow_move_assignable<T const volatile> : public ::boost::false_type{};
+template <class T> struct is_nothrow_move_assignable<T volatile> : public ::boost::false_type{};
+template <class T> struct is_nothrow_move_assignable<T&> : public ::boost::false_type{};
 #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-template <class T>
-struct is_nothrow_move_assignable_imp<T&&> : public ::boost::false_type{};
+template <class T> struct is_nothrow_move_assignable<T&&> : public ::boost::false_type{};
 #endif
 
 #else
 
 template <class T>
-struct is_nothrow_move_assignable_imp{
-    BOOST_STATIC_CONSTANT(bool, value = (
-        ::boost::type_traits::ice_and<
-            ::boost::type_traits::ice_or<
-                ::boost::has_trivial_move_assign<T>::value,
-                ::boost::has_nothrow_assign<T>::value
-            >::value,
-            ::boost::type_traits::ice_not< ::boost::is_array<T>::value >::value
-        >::value));
-};
+struct is_nothrow_move_assignable : public integral_constant<bool,
+   (::boost::has_trivial_move_assign<T>::value || ::boost::has_nothrow_assign<T>::value) &&  ! ::boost::is_array<T>::value>{};
 
 #endif
 
-}
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_nothrow_move_assignable,T,::boost::detail::is_nothrow_move_assignable_imp<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_nothrow_move_assignable,void,false)
+template <> struct is_nothrow_move_assignable<void> : public false_type{};
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_nothrow_move_assignable,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_nothrow_move_assignable,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_nothrow_move_assignable,void volatile,false)
+template <> struct is_nothrow_move_assignable<void const> : public false_type{};
+template <> struct is_nothrow_move_assignable<void const volatile> : public false_type{};
+template <> struct is_nothrow_move_assignable<void volatile> : public false_type{};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_NOTHROW_MOVE_ASSIGNABLE_HPP_INCLUDED
index c09d5d1f94c420f356c46edeae16433c6f2e067c..8f4cee2cf902ca5fbb3baf0e5d3a26430a68b64e 100644 (file)
 
 #include <boost/config.hpp>
 #include <boost/type_traits/intrinsics.hpp>
-#include <boost/type_traits/has_trivial_move_constructor.hpp>
-#include <boost/type_traits/has_nothrow_copy.hpp>
-#include <boost/type_traits/is_array.hpp>
-#include <boost/type_traits/is_reference.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/utility/declval.hpp>
-#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/detail/workaround.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#ifdef BOOST_IS_NOTHROW_MOVE_CONSTRUCT
 
 namespace boost {
 
-namespace detail{
+template <class T>
+struct is_nothrow_move_constructible : public integral_constant<bool, BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T)>{};
 
-#ifdef BOOST_IS_NOTHROW_MOVE_CONSTRUCT
+template <class T> struct is_nothrow_move_constructible<volatile T> : public ::boost::false_type {};
+template <class T> struct is_nothrow_move_constructible<const volatile T> : public ::boost::false_type{};
 
-template <class T>
-struct is_nothrow_move_constructible_imp{
-   BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T));
-};
+#elif !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40700)
 
-template <class T>
-struct is_nothrow_move_constructible_imp<volatile T> : public ::boost::false_type {};
-template <class T>
-struct is_nothrow_move_constructible_imp<const volatile T> : public ::boost::false_type{};
-template <class T>
-struct is_nothrow_move_constructible_imp<T&> : public ::boost::false_type{};
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-template <class T>
-struct is_nothrow_move_constructible_imp<T&&> : public ::boost::false_type{};
-#endif
+#include <boost/type_traits/declval.hpp>
+#include <boost/utility/enable_if.hpp>
 
-#elif !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR)
+namespace boost{ namespace detail{
 
 template <class T, class Enable = void>
 struct false_or_cpp11_noexcept_move_constructible: public ::boost::false_type {};
@@ -59,51 +43,44 @@ struct false_or_cpp11_noexcept_move_constructible <
     > : public ::boost::integral_constant<bool, BOOST_NOEXCEPT_EXPR(T(::boost::declval<T>()))>
 {};
 
-template <class T>
-struct is_nothrow_move_constructible_imp{
-   BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::false_or_cpp11_noexcept_move_constructible<T>::value);
-};
+}
 
-template <class T>
-struct is_nothrow_move_constructible_imp<volatile T> : public ::boost::false_type {};
-template <class T>
-struct is_nothrow_move_constructible_imp<const volatile T> : public ::boost::false_type{};
-template <class T>
-struct is_nothrow_move_constructible_imp<T&> : public ::boost::false_type{};
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-template <class T>
-struct is_nothrow_move_constructible_imp<T&&> : public ::boost::false_type{};
-#endif
+template <class T> struct is_nothrow_move_constructible
+   : public integral_constant<bool, ::boost::detail::false_or_cpp11_noexcept_move_constructible<T>::value>{};
+
+template <class T> struct is_nothrow_move_constructible<volatile T> : public ::boost::false_type {};
+template <class T> struct is_nothrow_move_constructible<const volatile T> : public ::boost::false_type{};
+template <class T, std::size_t N> struct is_nothrow_move_constructible<T[N]> : public ::boost::false_type{};
+template <class T> struct is_nothrow_move_constructible<T[]> : public ::boost::false_type{};
 
 #else
 
-template <class T>
-struct is_nothrow_move_constructible_imp{
-    BOOST_STATIC_CONSTANT(bool, value =(
-        ::boost::type_traits::ice_and<
-            ::boost::type_traits::ice_or<
-                ::boost::has_trivial_move_constructor<T>::value,
-                ::boost::has_nothrow_copy<T>::value
-            >::value,
-            ::boost::type_traits::ice_not< ::boost::is_array<T>::value >::value
-        >::value));
-};
+#include <boost/type_traits/has_trivial_move_constructor.hpp>
+#include <boost/type_traits/has_nothrow_copy.hpp>
+#include <boost/type_traits/is_array.hpp>
 
-#endif
+namespace boost{
 
-}
+template <class T>
+struct is_nothrow_move_constructible
+   : public integral_constant<bool,
+   (::boost::has_trivial_move_constructor<T>::value || ::boost::has_nothrow_copy<T>::value) && !::boost::is_array<T>::value>
+{};
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_nothrow_move_constructible,T,::boost::detail::is_nothrow_move_constructible_imp<T>::value)
+#endif
 
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_nothrow_move_constructible,void,false)
+template <> struct is_nothrow_move_constructible<void> : false_type{};
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_nothrow_move_constructible,void const,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_nothrow_move_constructible,void const volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_nothrow_move_constructible,void volatile,false)
+template <> struct is_nothrow_move_constructible<void const> : false_type{};
+template <> struct is_nothrow_move_constructible<void volatile> : false_type{};
+template <> struct is_nothrow_move_constructible<void const volatile> : false_type{};
+#endif
+// References are always trivially constructible, even if the thing they reference is not:
+template <class T> struct is_nothrow_move_constructible<T&> : public ::boost::true_type{};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <class T> struct is_nothrow_move_constructible<T&&> : public ::boost::true_type{};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_NOTHROW_MOVE_CONSTRUCTIBLE_HPP_INCLUDED
index 1d1ae4f02e607af23f97da543be5214880c8fdc3..fc9d2f25d3296a4f6dca38df33aeb7c180f0906c 100644 (file)
@@ -9,37 +9,20 @@
 #ifndef BOOST_TT_IS_OBJECT_HPP_INCLUDED
 #define BOOST_TT_IS_OBJECT_HPP_INCLUDED
 
+#include <boost/config.hpp>
 #include <boost/type_traits/is_reference.hpp>
 #include <boost/type_traits/is_void.hpp>
 #include <boost/type_traits/is_function.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/type_traits/detail/ice_not.hpp>
-#include <boost/config.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
 
 namespace boost {
 
-namespace detail {
-
-template <typename T>
-struct is_object_impl
-{
-   BOOST_STATIC_CONSTANT(bool, value =
-      (::boost::type_traits::ice_and<
-         ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,
-         ::boost::type_traits::ice_not< ::boost::is_void<T>::value>::value,
-         ::boost::type_traits::ice_not< ::boost::is_function<T>::value>::value
-      >::value));
-};
-
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_object,T,::boost::detail::is_object_impl<T>::value)
+template <class T> struct is_object
+   : public 
+      integral_constant<
+         bool, 
+         ! ::boost::is_reference<T>::value && ! ::boost::is_void<T>::value && ! ::boost::is_function<T>::value > 
+{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_OBJECT_HPP_INCLUDED
index 820a3ceeb97e3b0f81772d6c3fe5f16aa12c5c73..9204c93e25896f6146326b1514fbea84f38c5dd0 100644 (file)
@@ -9,16 +9,16 @@
 #ifndef BOOST_TT_IS_POD_HPP_INCLUDED
 #define BOOST_TT_IS_POD_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/detail/config.hpp>
 #include <boost/type_traits/is_void.hpp>
 #include <boost/type_traits/is_scalar.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
 #include <boost/type_traits/intrinsics.hpp>
 
-#include <cstddef>
+#ifdef __SUNPRO_CC
+#include <boost/type_traits/is_function.hpp>
+#endif
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <cstddef>
 
 #ifndef BOOST_IS_POD
 #define BOOST_INTERNAL_IS_POD(T) false
@@ -31,49 +31,28 @@ namespace boost {
 // forward declaration, needed by 'is_pod_array_helper' template below
 template< typename T > struct is_POD;
 
-namespace detail {
-
-
-template <typename T> struct is_pod_impl
-{ 
-    BOOST_STATIC_CONSTANT(
-        bool, value =
-        (::boost::type_traits::ice_or<
-            ::boost::is_scalar<T>::value,
-            ::boost::is_void<T>::value,
-            BOOST_INTERNAL_IS_POD(T)
-         >::value));
-};
+template <typename T> struct is_pod
+: public integral_constant<bool, ::boost::is_scalar<T>::value || ::boost::is_void<T>::value || BOOST_INTERNAL_IS_POD(T)>
+{};
 
 #if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
-template <typename T, std::size_t sz>
-struct is_pod_impl<T[sz]>
-    : public is_pod_impl<T>
-{
-};
+template <typename T, std::size_t sz> struct is_pod<T[sz]> : public is_pod<T>{};
 #endif
 
 
 // the following help compilers without partial specialization support:
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void,true)
+template<> struct is_pod<void> : public true_type{};
 
 #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void const,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void volatile,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void const volatile,true)
+template<> struct is_pod<void const> : public true_type{};
+template<> struct is_pod<void const volatile> : public true_type{};
+template<> struct is_pod<void volatile> : public true_type{};
 #endif
 
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pod,T,::boost::detail::is_pod_impl<T>::value)
-// is_POD is the old depricated name for this trait, do not use this as it may
-// be removed in future without warning!!
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_POD,T,::boost::is_pod<T>::value)
+template<class T> struct is_POD : public is_pod<T>{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #undef BOOST_INTERNAL_IS_POD
 
 #endif // BOOST_TT_IS_POD_HPP_INCLUDED
index aad30f25412e59c7e1e745236dda4a3bebc492b5..44b06c227ed3f75a461814fb7d46cdd18c27a8d4 100644 (file)
 #ifndef BOOST_TT_IS_POINTER_HPP_INCLUDED
 #define BOOST_TT_IS_POINTER_HPP_INCLUDED
 
-#include <boost/type_traits/is_member_pointer.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/type_traits/detail/ice_not.hpp>
-#include <boost/type_traits/config.hpp>
-#include <boost/type_traits/remove_cv.hpp>
-
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
 
 #if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,__is_pointer(T))
+template <class T> struct is_pointer : public integral_constant<bool, __is_pointer(T)>{};
 #else
-
-namespace detail {
-
-template< typename T > struct is_pointer_helper
-{
-    BOOST_STATIC_CONSTANT(bool, value = false);
-};
-
-#   define TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(helper,sp,result) \
-template< typename T > struct helper<sp> \
-{ \
-    BOOST_STATIC_CONSTANT(bool, value = result); \
-}; \
-/**/
-
-TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(is_pointer_helper,T*,true)
-
-#   undef TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC
-
-template< typename T >
-struct is_pointer_impl
-{
-    BOOST_STATIC_CONSTANT(bool, value =
-        (::boost::type_traits::ice_and<
-        ::boost::detail::is_pointer_helper<typename remove_cv<T>::type>::value
-            , ::boost::type_traits::ice_not<
-                ::boost::is_member_pointer<T>::value
-                >::value
-            >::value)
-        );
-};
-
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,::boost::detail::is_pointer_impl<T>::value)
-
-#if defined(__BORLANDC__) && !defined(__COMO__) && (__BORLANDC__ < 0x600)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T&,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& const,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& const volatile,false)
+template <class T> struct is_pointer : public false_type{};
+template <class T> struct is_pointer<T*> : public true_type{};
+template <class T> struct is_pointer<T*const> : public true_type{};
+template <class T> struct is_pointer<T*const volatile> : public true_type{};
+template <class T> struct is_pointer<T*volatile> : public true_type{};
+
+#ifdef BOOST_MSVC
+template <class T> struct is_pointer<T const> : public is_pointer<T>{};
+template <class T> struct is_pointer<T const volatile> : public is_pointer<T>{};
+template <class T> struct is_pointer<T volatile> : public is_pointer<T>{};
 #endif
 
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_POINTER_HPP_INCLUDED
index aac985105d0f32bcc2ac5919025b5ef807d472e9..722d8b46b2d5c9e86911c51ed9a735699bce8ad7 100644 (file)
@@ -9,12 +9,10 @@
 #define BOOST_TT_IS_POLYMORPHIC_HPP
 
 #include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 #ifndef BOOST_IS_POLYMORPHIC
 #include <boost/type_traits/is_class.hpp>
-#include <boost/type_traits/remove_cv.hpp>
 #endif
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
 #include <boost/detail/workaround.hpp>
 
 #if defined(BOOST_MSVC) && (BOOST_MSVC >= 1700)
@@ -34,8 +32,7 @@ struct is_polymorphic_imp1
 # if BOOST_WORKAROUND(__MWERKS__, <= 0x2407) // CWPro7 should return false always.
     typedef char d1, (&d2)[2];
 # else 
-   typedef typename remove_cv<T>::type ncvT;
-   struct d1 : public ncvT
+   struct d1 : public T
    {
       d1();
 #  if !defined(__GNUC__) // this raises warnings with some classes, and buys nothing with GCC
@@ -47,7 +44,7 @@ struct is_polymorphic_imp1
       d1(const d1&);
       d1& operator=(const d1&);
    };
-   struct d2 : public ncvT
+   struct d2 : public T
    {
       d2();
       virtual ~d2()throw();
@@ -67,6 +64,10 @@ struct is_polymorphic_imp1
    BOOST_STATIC_CONSTANT(bool, value = (sizeof(d2) == sizeof(d1)));
 };
 
+template <class T> struct is_polymorphic_imp1<T const> : public is_polymorphic_imp1<T>{};
+template <class T> struct is_polymorphic_imp1<T const volatile> : public is_polymorphic_imp1<T>{};
+template <class T> struct is_polymorphic_imp1<T volatile> : public is_polymorphic_imp1<T>{};
+
 template <class T>
 struct is_polymorphic_imp2
 {
@@ -104,18 +105,16 @@ struct is_polymorphic_imp
 
 } // namespace detail
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_polymorphic,T,::boost::detail::is_polymorphic_imp<T>::value)
+template <class T> struct is_polymorphic : public integral_constant<bool, ::boost::detail::is_polymorphic_imp<T>::value> {};
 
 #else // BOOST_IS_POLYMORPHIC
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_polymorphic,T,BOOST_IS_POLYMORPHIC(T))
+template <class T> struct is_polymorphic : public integral_constant<bool, BOOST_IS_POLYMORPHIC(T)> {};
 
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #if defined(BOOST_MSVC) && (BOOST_MSVC >= 1700)
 #pragma warning(pop)
 #endif
index 49b5f9ff0fb5af611d4a82585e7121dc813084fa..85f0a63204ea01e7d6fdac0c145d08ecd7213766 100644 (file)
 #ifndef BOOST_TT_IS_REFERENCE_HPP_INCLUDED
 #define BOOST_TT_IS_REFERENCE_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
 #include <boost/type_traits/is_lvalue_reference.hpp>
 #include <boost/type_traits/is_rvalue_reference.hpp>
-#include <boost/type_traits/ice.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
 
 namespace boost {
 
-namespace detail {
-
-template <typename T>
-struct is_reference_impl
-{
-   BOOST_STATIC_CONSTANT(bool, value =
-      (::boost::type_traits::ice_or<
-         ::boost::is_lvalue_reference<T>::value, ::boost::is_rvalue_reference<T>::value
-       >::value));
-};
-
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_reference,T,::boost::detail::is_reference_impl<T>::value)
+template <class T> struct is_reference 
+   : public 
+   integral_constant<
+      bool, 
+      ::boost::is_lvalue_reference<T>::value || ::boost::is_rvalue_reference<T>::value>
+{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED
 
index 93cd0bf187047d4930ad02d98a1724c349761a0d..50e88edee0ef542e8226dc206072dc31c385faae 100644 (file)
@@ -9,21 +9,17 @@
 #ifndef BOOST_TT_IS_RVALUE_REFERENCE_HPP_INCLUDED
 #define BOOST_TT_IS_RVALUE_REFERENCE_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/config.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_rvalue_reference,T,false)
+template <class T> struct is_rvalue_reference : public false_type {};
 #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_rvalue_reference,T&&,true)
+template <class T> struct is_rvalue_reference<T&&> : public true_type {};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED
 
index c8987b07a8f09cf640a852150976c15f7b0015e6..d16f4b2b1a3201646e59652d2fbaa6ec6bf0f6e8 100644 (file)
 #ifndef BOOST_TT_IS_SAME_HPP_INCLUDED
 #define BOOST_TT_IS_SAME_HPP_INCLUDED
 
-#include <boost/type_traits/config.hpp>
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
 
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_same,T,U,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T,T,true)
+   template <class T, class U> struct is_same : public false_type {};
+   template <class T> struct is_same<T,T> : public true_type {};
 #if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
 // without this, Borland's compiler gives the wrong answer for
 // references to arrays:
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T&,T&,true)
+   template <class T> struct is_same<T&, T&> : public true_type{};
 #endif
 
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif  // BOOST_TT_IS_SAME_HPP_INCLUDED
 
index 4af3def14c76a4852e8455dd343c3461e3d98277..303144059657c5817f5a6bdfe4c5e416908c23b6 100644 (file)
 #include <boost/type_traits/is_enum.hpp>
 #include <boost/type_traits/is_pointer.hpp>
 #include <boost/type_traits/is_member_pointer.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
 #include <boost/config.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 namespace boost {
 
-namespace detail {
-
 template <typename T>
-struct is_scalar_impl
-{ 
-   BOOST_STATIC_CONSTANT(bool, value =
-      (::boost::type_traits::ice_or<
-         ::boost::is_arithmetic<T>::value,
-         ::boost::is_enum<T>::value,
-         ::boost::is_pointer<T>::value,
-         ::boost::is_member_pointer<T>::value
-      >::value));
-};
-
-// these specializations are only really needed for compilers 
-// without partial specialization support:
-template <> struct is_scalar_impl<void>{ BOOST_STATIC_CONSTANT(bool, value = false ); };
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-template <> struct is_scalar_impl<void const>{ BOOST_STATIC_CONSTANT(bool, value = false ); };
-template <> struct is_scalar_impl<void volatile>{ BOOST_STATIC_CONSTANT(bool, value = false ); };
-template <> struct is_scalar_impl<void const volatile>{ BOOST_STATIC_CONSTANT(bool, value = false ); };
-#endif
-
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_scalar,T,::boost::detail::is_scalar_impl<T>::value)
+struct is_scalar
+   : public integral_constant<bool, ::boost::is_arithmetic<T>::value || ::boost::is_enum<T>::value || ::boost::is_pointer<T>::value || ::boost::is_member_pointer<T>::value>
+{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_SCALAR_HPP_INCLUDED
index 5673284944ff3d9d425ee4f9c15baaee62bcd286..70ca2e4796709bc7db3b5123445fa2c25599cb28 100644 (file)
 #include <boost/type_traits/is_integral.hpp>
 #include <boost/type_traits/remove_cv.hpp>
 #include <boost/type_traits/is_enum.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <climits>
 
 namespace boost {
 
 #if !defined( __CODEGEARC__ )
 
-namespace detail{
+#if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1310) && \
+    !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) &&\
+    !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
 
-#if !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) && !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
+namespace detail{
 
 template <class T>
 struct is_signed_values
@@ -67,70 +66,98 @@ struct is_signed_select_helper<false>
 };
 
 template <class T>
-struct is_signed_imp
+struct is_signed_impl
 {
-   typedef is_signed_select_helper< 
-      ::boost::type_traits::ice_or<
-         ::boost::is_integral<T>::value,
-         ::boost::is_enum<T>::value>::value 
-   > selector;
+   typedef ::boost::detail::is_signed_select_helper< ::boost::is_integral<T>::value || ::boost::is_enum<T>::value> selector;
    typedef typename selector::template rebind<T> binder;
    typedef typename binder::type type;
    BOOST_STATIC_CONSTANT(bool, value = type::value);
 };
 
+}
+
+template <class T> struct is_signed : public integral_constant<bool, boost::detail::is_signed_impl<T>::value> {};
+
 #else
 
-template <class T> struct is_signed_imp : public false_type{};
-template <> struct is_signed_imp<signed char> : public true_type{};
-template <> struct is_signed_imp<const signed char> : public true_type{};
-template <> struct is_signed_imp<volatile signed char> : public true_type{};
-template <> struct is_signed_imp<const volatile signed char> : public true_type{};
-template <> struct is_signed_imp<short> : public true_type{};
-template <> struct is_signed_imp<const short> : public true_type{};
-template <> struct is_signed_imp<volatile short> : public true_type{};
-template <> struct is_signed_imp<const volatile short> : public true_type{};
-template <> struct is_signed_imp<int> : public true_type{};
-template <> struct is_signed_imp<const int> : public true_type{};
-template <> struct is_signed_imp<volatile int> : public true_type{};
-template <> struct is_signed_imp<const volatile int> : public true_type{};
-template <> struct is_signed_imp<long> : public true_type{};
-template <> struct is_signed_imp<const long> : public true_type{};
-template <> struct is_signed_imp<volatile long> : public true_type{};
-template <> struct is_signed_imp<const volatile long> : public true_type{};
-#ifdef BOOST_HAS_LONG_LONG
-template <> struct is_signed_imp<long long> : public true_type{};
-template <> struct is_signed_imp<const long long> : public true_type{};
-template <> struct is_signed_imp<volatile long long> : public true_type{};
-template <> struct is_signed_imp<const volatile long long> : public true_type{};
-#endif
-#if defined(CHAR_MIN) && (CHAR_MIN != 0)
-template <> struct is_signed_imp<char> : public true_type{};
-template <> struct is_signed_imp<const char> : public true_type{};
-template <> struct is_signed_imp<volatile char> : public true_type{};
-template <> struct is_signed_imp<const volatile char> : public true_type{};
-#endif
-#if defined(WCHAR_MIN) && (WCHAR_MIN != 0)
-template <> struct is_signed_imp<wchar_t> : public true_type{};
-template <> struct is_signed_imp<const wchar_t> : public true_type{};
-template <> struct is_signed_imp<volatile wchar_t> : public true_type{};
-template <> struct is_signed_imp<const volatile wchar_t> : public true_type{};
-#endif
+template <class T> struct is_signed : public false_type{};
 
 #endif
 
-}
-
-#endif // !defined( __CODEGEARC__ )
+#else //defined( __CODEGEARC__ )
+   template <class T> struct is_signed : public integral_constant<bool, __is_signed(T)>{};
+#endif
 
-#if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_signed,T,__is_signed(T))
+template <> struct is_signed<signed char> : public true_type{};
+template <> struct is_signed<const signed char> : public true_type{};
+template <> struct is_signed<volatile signed char> : public true_type{};
+template <> struct is_signed<const volatile signed char> : public true_type{};
+template <> struct is_signed<short> : public true_type{};
+template <> struct is_signed<const short> : public true_type{};
+template <> struct is_signed<volatile short> : public true_type{};
+template <> struct is_signed<const volatile short> : public true_type{};
+template <> struct is_signed<int> : public true_type{};
+template <> struct is_signed<const int> : public true_type{};
+template <> struct is_signed<volatile int> : public true_type{};
+template <> struct is_signed<const volatile int> : public true_type{};
+template <> struct is_signed<long> : public true_type{};
+template <> struct is_signed<const long> : public true_type{};
+template <> struct is_signed<volatile long> : public true_type{};
+template <> struct is_signed<const volatile long> : public true_type{};
+
+template <> struct is_signed<unsigned char> : public false_type{};
+template <> struct is_signed<const unsigned char> : public false_type{};
+template <> struct is_signed<volatile unsigned char> : public false_type{};
+template <> struct is_signed<const volatile unsigned char> : public false_type{};
+template <> struct is_signed<unsigned short> : public false_type{};
+template <> struct is_signed<const unsigned short> : public false_type{};
+template <> struct is_signed<volatile unsigned short> : public false_type{};
+template <> struct is_signed<const volatile unsigned short> : public false_type{};
+template <> struct is_signed<unsigned int> : public false_type{};
+template <> struct is_signed<const unsigned int> : public false_type{};
+template <> struct is_signed<volatile unsigned int> : public false_type{};
+template <> struct is_signed<const volatile unsigned int> : public false_type{};
+template <> struct is_signed<unsigned long> : public false_type{};
+template <> struct is_signed<const unsigned long> : public false_type{};
+template <> struct is_signed<volatile unsigned long> : public false_type{};
+template <> struct is_signed<const volatile unsigned long> : public false_type{};
+#ifdef BOOST_HAS_LONG_LONG
+template <> struct is_signed< ::boost::long_long_type> : public true_type{};
+template <> struct is_signed<const ::boost::long_long_type> : public true_type{};
+template <> struct is_signed<volatile ::boost::long_long_type> : public true_type{};
+template <> struct is_signed<const volatile ::boost::long_long_type> : public true_type{};
+
+template <> struct is_signed< ::boost::ulong_long_type> : public false_type{};
+template <> struct is_signed<const ::boost::ulong_long_type> : public false_type{};
+template <> struct is_signed<volatile ::boost::ulong_long_type> : public false_type{};
+template <> struct is_signed<const volatile ::boost::ulong_long_type> : public false_type{};
+#endif
+#if defined(CHAR_MIN) 
+#if CHAR_MIN != 0
+template <> struct is_signed<char> : public true_type{};
+template <> struct is_signed<const char> : public true_type{};
+template <> struct is_signed<volatile char> : public true_type{};
+template <> struct is_signed<const volatile char> : public true_type{};
 #else
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_signed,T,::boost::detail::is_signed_imp<T>::value)
+template <> struct is_signed<char> : public false_type{};
+template <> struct is_signed<const char> : public false_type{};
+template <> struct is_signed<volatile char> : public false_type{};
+template <> struct is_signed<const volatile char> : public false_type{};
+#endif
+#endif
+#if defined(WCHAR_MIN) && !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+#if WCHAR_MIN != 0
+template <> struct is_signed<wchar_t> : public true_type{};
+template <> struct is_signed<const wchar_t> : public true_type{};
+template <> struct is_signed<volatile wchar_t> : public true_type{};
+template <> struct is_signed<const volatile wchar_t> : public true_type{};
+#else
+template <> struct is_signed<wchar_t> : public false_type{};
+template <> struct is_signed<const wchar_t> : public false_type{};
+template <> struct is_signed<volatile wchar_t> : public false_type{};
+template <> struct is_signed<const volatile wchar_t> : public false_type{};
+#endif
 #endif
-
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
index d8d40635fe220d3bb9a1dde2bf3666a50923b01b..f9266da5b8c705d24891bc0925c34ca8cfed313e 100644 (file)
 #include <boost/type_traits/has_trivial_destructor.hpp>
 #include <boost/type_traits/is_class.hpp>
 #include <boost/type_traits/is_empty.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
 #include <boost/config.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 namespace boost {
 
-namespace detail {
-
 template <typename T>
-struct is_stateless_impl
-{
-  BOOST_STATIC_CONSTANT(bool, value = 
-    (::boost::type_traits::ice_and<
-       ::boost::has_trivial_constructor<T>::value,
-       ::boost::has_trivial_copy<T>::value,
-       ::boost::has_trivial_destructor<T>::value,
-       ::boost::is_class<T>::value,
-       ::boost::is_empty<T>::value
-     >::value));
-};
-
-} // namespace detail
-
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_stateless,T,::boost::detail::is_stateless_impl<T>::value)
+struct is_stateless
+ : public integral_constant<bool,  
+      (::boost::has_trivial_constructor<T>::value
+      && ::boost::has_trivial_copy<T>::value
+      && ::boost::has_trivial_destructor<T>::value
+      && ::boost::is_class<T>::value
+      && ::boost::is_empty<T>::value)>
+{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_STATELESS_HPP_INCLUDED
index 610f162ba41cc619f8f3f389836498368b57f76c..c5e1a96019677cb158c34cc49fa077f3db30ca0f 100644 (file)
 #ifndef BOOST_TT_IS_UNION_HPP_INCLUDED
 #define BOOST_TT_IS_UNION_HPP_INCLUDED
 
-#include <boost/type_traits/remove_cv.hpp>
-#include <boost/type_traits/config.hpp>
 #include <boost/type_traits/intrinsics.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
 
-namespace detail {
-#ifndef __GNUC__
-template <typename T> struct is_union_impl
-{
-   typedef typename remove_cv<T>::type cvt;
 #ifdef BOOST_IS_UNION
-   BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_UNION(cvt));
+template <class T> struct is_union : public integral_constant<bool, BOOST_IS_UNION(T)> {};
 #else
-   BOOST_STATIC_CONSTANT(bool, value = false);
+template <class T> struct is_union : public integral_constant<bool, false> {};
 #endif
-};
-#else
-//
-// using remove_cv here generates a whole load of needless
-// warnings with gcc, since it doesn't do any good with gcc
-// in any case (at least at present), just remove it:
-//
-template <typename T> struct is_union_impl
-{
-#ifdef BOOST_IS_UNION
-   BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_UNION(T));
-#else
-   BOOST_STATIC_CONSTANT(bool, value = false);
-#endif
-};
-#endif
-} // namespace detail
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_union,T,::boost::detail::is_union_impl<T>::value)
+template <class T> struct is_union<T const> : public is_union<T>{};
+template <class T> struct is_union<T volatile const> : public is_union<T>{};
+template <class T> struct is_union<T volatile> : public is_union<T>{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_UNION_HPP_INCLUDED
index 0602838a33fca4725ed9b96792caec59420f9ad8..c4c54af7b36610bf1d6c7341fcff3d3408bca74e 100644 (file)
 #include <boost/type_traits/is_integral.hpp>
 #include <boost/type_traits/is_enum.hpp>
 #include <boost/type_traits/remove_cv.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <climits>
 
 namespace boost {
 
 #if !defined( __CODEGEARC__ )
 
-namespace detail{
+#if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1310) &&\
+    !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) &&\
+    !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
 
-#if !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) && !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
+namespace detail{
 
 template <class T>
 struct is_unsigned_values
@@ -46,7 +46,7 @@ struct is_ununsigned_helper
 };
 
 template <bool integral_type>
-struct is_ununsigned_select_helper
+struct is_unsigned_select_helper
 {
    template <class T>
    struct rebind
@@ -56,7 +56,7 @@ struct is_ununsigned_select_helper
 };
 
 template <>
-struct is_ununsigned_select_helper<false>
+struct is_unsigned_select_helper<false>
 {
    template <class T>
    struct rebind
@@ -66,70 +66,98 @@ struct is_ununsigned_select_helper<false>
 };
 
 template <class T>
-struct is_unsigned_imp
+struct is_unsigned
 {
-   typedef is_ununsigned_select_helper< 
-      ::boost::type_traits::ice_or<
-         ::boost::is_integral<T>::value,
-         ::boost::is_enum<T>::value>::value 
-   > selector;
+   typedef ::boost::detail::is_unsigned_select_helper< ::boost::is_integral<T>::value || ::boost::is_enum<T>::value > selector;
    typedef typename selector::template rebind<T> binder;
    typedef typename binder::type type;
    BOOST_STATIC_CONSTANT(bool, value = type::value);
 };
 
+} // namespace detail
+
+template <class T> struct is_unsigned : public integral_constant<bool, boost::detail::is_unsigned<T>::value> {};
+
 #else
 
-template <class T> struct is_unsigned_imp : public false_type{};
-template <> struct is_unsigned_imp<unsigned char> : public true_type{};
-template <> struct is_unsigned_imp<const unsigned char> : public true_type{};
-template <> struct is_unsigned_imp<volatile unsigned char> : public true_type{};
-template <> struct is_unsigned_imp<const volatile unsigned char> : public true_type{};
-template <> struct is_unsigned_imp<unsigned short> : public true_type{};
-template <> struct is_unsigned_imp<const unsigned short> : public true_type{};
-template <> struct is_unsigned_imp<volatile unsigned short> : public true_type{};
-template <> struct is_unsigned_imp<const volatile unsigned short> : public true_type{};
-template <> struct is_unsigned_imp<unsigned int> : public true_type{};
-template <> struct is_unsigned_imp<const unsigned int> : public true_type{};
-template <> struct is_unsigned_imp<volatile unsigned int> : public true_type{};
-template <> struct is_unsigned_imp<const volatile unsigned int> : public true_type{};
-template <> struct is_unsigned_imp<unsigned long> : public true_type{};
-template <> struct is_unsigned_imp<const unsigned long> : public true_type{};
-template <> struct is_unsigned_imp<volatile unsigned long> : public true_type{};
-template <> struct is_unsigned_imp<const volatile unsigned long> : public true_type{};
-#ifdef BOOST_HAS_LONG_LONG
-template <> struct is_unsigned_imp<unsigned long long> : public true_type{};
-template <> struct is_unsigned_imp<const unsigned long long> : public true_type{};
-template <> struct is_unsigned_imp<volatile unsigned long long> : public true_type{};
-template <> struct is_unsigned_imp<const volatile unsigned long long> : public true_type{};
-#endif
-#if defined(CHAR_MIN) && (CHAR_MIN == 0)
-template <> struct is_unsigned_imp<char> : public true_type{};
-template <> struct is_unsigned_imp<const char> : public true_type{};
-template <> struct is_unsigned_imp<volatile char> : public true_type{};
-template <> struct is_unsigned_imp<const volatile char> : public true_type{};
-#endif
-#if defined(WCHAR_MIN) && (WCHAR_MIN == 0) && !defined(BOOST_NO_INTRINSIC_WCHAR_T)
-template <> struct is_unsigned_imp<wchar_t> : public true_type{};
-template <> struct is_unsigned_imp<const wchar_t> : public true_type{};
-template <> struct is_unsigned_imp<volatile wchar_t> : public true_type{};
-template <> struct is_unsigned_imp<const volatile wchar_t> : public true_type{};
-#endif
+template <class T> struct is_unsigned : public false_type{};
 
 #endif
 
-}
-
-#endif // !defined( __CODEGEARC__ )
+#else // defined( __CODEGEARC__ )
+template <class T> struct is_unsigned : public integral_constant<bool, __is_unsigned(T)> {};
+#endif
 
-#if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_unsigned,T,__is_unsigned(T))
+template <> struct is_unsigned<unsigned char> : public true_type{};
+template <> struct is_unsigned<const unsigned char> : public true_type{};
+template <> struct is_unsigned<volatile unsigned char> : public true_type{};
+template <> struct is_unsigned<const volatile unsigned char> : public true_type{};
+template <> struct is_unsigned<unsigned short> : public true_type{};
+template <> struct is_unsigned<const unsigned short> : public true_type{};
+template <> struct is_unsigned<volatile unsigned short> : public true_type{};
+template <> struct is_unsigned<const volatile unsigned short> : public true_type{};
+template <> struct is_unsigned<unsigned int> : public true_type{};
+template <> struct is_unsigned<const unsigned int> : public true_type{};
+template <> struct is_unsigned<volatile unsigned int> : public true_type{};
+template <> struct is_unsigned<const volatile unsigned int> : public true_type{};
+template <> struct is_unsigned<unsigned long> : public true_type{};
+template <> struct is_unsigned<const unsigned long> : public true_type{};
+template <> struct is_unsigned<volatile unsigned long> : public true_type{};
+template <> struct is_unsigned<const volatile unsigned long> : public true_type{};
+
+template <> struct is_unsigned<signed char> : public false_type{};
+template <> struct is_unsigned<const signed char> : public false_type{};
+template <> struct is_unsigned<volatile signed char> : public false_type{};
+template <> struct is_unsigned<const volatile signed char> : public false_type{};
+template <> struct is_unsigned< short> : public false_type{};
+template <> struct is_unsigned<const  short> : public false_type{};
+template <> struct is_unsigned<volatile  short> : public false_type{};
+template <> struct is_unsigned<const volatile  short> : public false_type{};
+template <> struct is_unsigned< int> : public false_type{};
+template <> struct is_unsigned<const  int> : public false_type{};
+template <> struct is_unsigned<volatile  int> : public false_type{};
+template <> struct is_unsigned<const volatile  int> : public false_type{};
+template <> struct is_unsigned< long> : public false_type{};
+template <> struct is_unsigned<const  long> : public false_type{};
+template <> struct is_unsigned<volatile  long> : public false_type{};
+template <> struct is_unsigned<const volatile  long> : public false_type{};
+#ifdef BOOST_HAS_LONG_LONG
+template <> struct is_unsigned< ::boost::ulong_long_type> : public true_type{};
+template <> struct is_unsigned<const ::boost::ulong_long_type> : public true_type{};
+template <> struct is_unsigned<volatile ::boost::ulong_long_type> : public true_type{};
+template <> struct is_unsigned<const volatile ::boost::ulong_long_type> : public true_type{};
+
+template <> struct is_unsigned< ::boost::long_long_type> : public false_type{};
+template <> struct is_unsigned<const ::boost::long_long_type> : public false_type{};
+template <> struct is_unsigned<volatile ::boost::long_long_type> : public false_type{};
+template <> struct is_unsigned<const volatile ::boost::long_long_type> : public false_type{};
+#endif
+#if defined(CHAR_MIN) 
+#if CHAR_MIN == 0
+template <> struct is_unsigned<char> : public true_type{};
+template <> struct is_unsigned<const char> : public true_type{};
+template <> struct is_unsigned<volatile char> : public true_type{};
+template <> struct is_unsigned<const volatile char> : public true_type{};
 #else
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_unsigned,T,::boost::detail::is_unsigned_imp<T>::value)
+template <> struct is_unsigned<char> : public false_type{};
+template <> struct is_unsigned<const char> : public false_type{};
+template <> struct is_unsigned<volatile char> : public false_type{};
+template <> struct is_unsigned<const volatile char> : public false_type{};
+#endif
+#endif
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && defined(WCHAR_MIN)
+#if WCHAR_MIN == 0
+template <> struct is_unsigned<wchar_t> : public true_type{};
+template <> struct is_unsigned<const wchar_t> : public true_type{};
+template <> struct is_unsigned<volatile wchar_t> : public true_type{};
+template <> struct is_unsigned<const volatile wchar_t> : public true_type{};
+#else
+template <> struct is_unsigned<wchar_t> : public false_type{};
+template <> struct is_unsigned<const wchar_t> : public false_type{};
+template <> struct is_unsigned<volatile wchar_t> : public false_type{};
+template <> struct is_unsigned<const volatile wchar_t> : public false_type{};
+#endif
 #endif
-
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
index 3daad1b51b154076a3fb7c735ee12e8d8be5493d..f0052563e3f15d4a433ffc8ade1595555e7801e8 100644 (file)
 
 #include <boost/type_traits/is_base_of.hpp>
 #include <boost/type_traits/is_same.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/not.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
 
 namespace boost {
 namespace detail {
@@ -34,7 +29,7 @@ struct is_virtual_base_of_impl
 };
 
 template<typename Base, typename Derived>
-struct is_virtual_base_of_impl<Base, Derived, mpl::true_>
+struct is_virtual_base_of_impl<Base, Derived, true_type>
 {
    union max_align
    {
@@ -88,7 +83,7 @@ struct is_virtual_base_of_impl<Base, Derived, mpl::true_>
 template<typename Base, typename Derived>
 struct is_virtual_base_of_impl2
 {
-   typedef typename mpl::and_<is_base_of<Base, Derived>, mpl::not_<is_same<Base, Derived> > >::type tag_type;
+   typedef boost::integral_constant<bool, (boost::is_base_of<Base, Derived>::value && ! boost::is_same<Base, Derived>::value)> tag_type;
    typedef is_virtual_base_of_impl<Base, Derived, tag_type> imp;
    BOOST_STATIC_CONSTANT(bool, value = imp::value);
 };
@@ -99,19 +94,12 @@ struct is_virtual_base_of_impl2
 
 } // namespace detail
 
-BOOST_TT_AUX_BOOL_TRAIT_DEF2(
-      is_virtual_base_of
-       , Base
-       , Derived
-       , (::boost::detail::is_virtual_base_of_impl2<Base,Derived>::value) 
-)
+template <class Base, class Derived> struct is_virtual_base_of : public integral_constant<bool, (::boost::detail::is_virtual_base_of_impl2<Base, Derived>::value)>{};
 
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_virtual_base_of,Base&,Derived,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_virtual_base_of,Base,Derived&,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_virtual_base_of,Base&,Derived&,false)
+template <class Base, class Derived> struct is_virtual_base_of<Base&, Derived> : public false_type{};
+template <class Base, class Derived> struct is_virtual_base_of<Base, Derived&> : public false_type{};
+template <class Base, class Derived> struct is_virtual_base_of<Base&, Derived&> : public false_type{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif
index 6f6fbff6d995ed4d37841485703cd74d62497788..183f8abf562de5b9ab466aa1574782fdf891037e 100644 (file)
@@ -9,30 +9,18 @@
 #ifndef BOOST_TT_IS_VOID_HPP_INCLUDED
 #define BOOST_TT_IS_VOID_HPP_INCLUDED
 
-#include <boost/config.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
 
-//* is a type T void - is_void<T>
-#if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_void,T,__is_void(T))
-#else
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_void,T,false)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void,true)
-
-#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void const,true)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void volatile,true)
-BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void const volatile,true)
-#endif
+template <class T>
+struct is_void : public false_type {};
 
-#endif  // non-CodeGear implementation
+template<> struct is_void<void> : public true_type {};
+template<> struct is_void<const void> : public true_type{};
+template<> struct is_void<const volatile void> : public true_type{};
+template<> struct is_void<volatile void> : public true_type{};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_VOID_HPP_INCLUDED
index d9839dad3b83696d44ec71e4a1a296a34af7d500..cefe9873081f92b1cdf996f111ae41040484138f 100644 (file)
 #ifndef BOOST_TT_IS_VOLATILE_HPP_INCLUDED
 #define BOOST_TT_IS_VOLATILE_HPP_INCLUDED
 
-#include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
-
-#   include <boost/type_traits/detail/cv_traits_impl.hpp>
-#   if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
-#       include <boost/type_traits/remove_bounds.hpp>
-#   endif
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
 
-namespace detail{
-template <class T>
-struct is_volatile_rval_filter
-{
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
-   BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<typename boost::remove_bounds<T>::type*>::is_volatile);
-#else
-   BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::is_volatile);
-#endif
-};
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-//
-// We can't filter out rvalue_references at the same level as
-// references or we get ambiguities from msvc:
-//
-template <class T>
-struct is_volatile_rval_filter<T&&>
-{
-   BOOST_STATIC_CONSTANT(bool, value = false);
-};
-#endif
-}
-
 #if defined( __CODEGEARC__ )
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,__is_volatile(T))
-#else
 
-//* is a type T declared volatile - is_volatile<T>
-BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::is_volatile_rval_filter<T>::value)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T&,false)
+   template <class T>
+   struct is_volatile : public integral_constant<bool, __is_volatile(T)> {};
 
-#if  defined(BOOST_ILLEGAL_CV_REFERENCES)
-// these are illegal specialisations; cv-qualifies applied to
-// references have no effect according to [8.3.2p1],
-// C++ Builder requires them though as it treats cv-qualified
-// references as distinct types...
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& const,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& volatile,false)
-BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& const volatile,false)
-#endif
+#else
+
+   template <class T>
+   struct is_volatile : public false_type {};
+   template <class T> struct is_volatile<T volatile> : public true_type{};
+   template <class T, size_t N> struct is_volatile<T volatile[N]> : public true_type{};
+   template <class T> struct is_volatile<T volatile[]> : public true_type{};
 
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_VOLATILE_HPP_INCLUDED
index 51cdbb0dc82fa6a5305807e03647e8afa0494530..0d2d5df61a16e15768c828c54707c62fdf657ab2 100644 (file)
@@ -9,7 +9,7 @@
 #ifndef BOOST_TT_MAKE_SIGNED_HPP_INCLUDED
 #define BOOST_TT_MAKE_SIGNED_HPP_INCLUDED
 
-#include <boost/mpl/if.hpp>
+#include <boost/type_traits/conditional.hpp>
 #include <boost/type_traits/is_integral.hpp>
 #include <boost/type_traits/is_signed.hpp>
 #include <boost/type_traits/is_unsigned.hpp>
 #include <boost/type_traits/is_volatile.hpp>
 #include <boost/type_traits/add_const.hpp>
 #include <boost/type_traits/add_volatile.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/type_traits/detail/ice_not.hpp>
 #include <boost/static_assert.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
-namespace detail {
-
 template <class T>
-struct make_signed_imp
+struct make_signed
 {
-   BOOST_STATIC_ASSERT(
-      (::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_enum<T>::value>::value));
-   BOOST_STATIC_ASSERT(
-      (::boost::type_traits::ice_not< ::boost::is_same<
-         typename remove_cv<T>::type, bool>::value>::value));
+private:
+   BOOST_STATIC_ASSERT_MSG(( ::boost::is_integral<T>::value || ::boost::is_enum<T>::value), "The template argument to make_signed must be an integer or enum type.");
+   BOOST_STATIC_ASSERT_MSG(!(::boost::is_same<typename remove_cv<T>::type, bool>::value), "The template argument to make_signed must not be the type bool.");
 
    typedef typename remove_cv<T>::type t_no_cv;
-   typedef typename mpl::if_c<
-      (::boost::type_traits::ice_and< 
-         ::boost::is_signed<T>::value,
-         ::boost::is_integral<T>::value,
-         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,
-         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,
-         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value >::value),
+   typedef typename conditional<
+      (::boost::is_signed<T>::value
+      && ::boost::is_integral<T>::value
+      && ! ::boost::is_same<t_no_cv, char>::value
+      && ! ::boost::is_same<t_no_cv, wchar_t>::value
+      && ! ::boost::is_same<t_no_cv, bool>::value),
       T,
-      typename mpl::if_c<
-         (::boost::type_traits::ice_and< 
-            ::boost::is_integral<T>::value,
-            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,
-            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,
-            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value>
-         ::value),
-         typename mpl::if_<
-            is_same<t_no_cv, unsigned char>,
+      typename conditional<
+         (::boost::is_integral<T>::value
+         && ! ::boost::is_same<t_no_cv, char>::value
+         && ! ::boost::is_same<t_no_cv, wchar_t>::value
+         && ! ::boost::is_same<t_no_cv, bool>::value),
+         typename conditional<
+            is_same<t_no_cv, unsigned char>::value,
             signed char,
-            typename mpl::if_<
-               is_same<t_no_cv, unsigned short>,
+            typename conditional<
+               is_same<t_no_cv, unsigned short>::value,
                signed short,
-               typename mpl::if_<
-                  is_same<t_no_cv, unsigned int>,
+               typename conditional<
+                  is_same<t_no_cv, unsigned int>::value,
                   int,
-                  typename mpl::if_<
-                     is_same<t_no_cv, unsigned long>,
+                  typename conditional<
+                     is_same<t_no_cv, unsigned long>::value,
                      long,
 #if defined(BOOST_HAS_LONG_LONG)
 #ifdef BOOST_HAS_INT128
-                     typename mpl::if_c<
+                     typename conditional<
                         sizeof(t_no_cv) == sizeof(boost::long_long_type), 
                         boost::long_long_type, 
                         boost::int128_type
@@ -89,21 +76,21 @@ struct make_signed_imp
             >::type
          >::type,
          // Not a regular integer type:
-         typename mpl::if_c<
+         typename conditional<
             sizeof(t_no_cv) == sizeof(unsigned char),
             signed char,
-            typename mpl::if_c<
+            typename conditional<
                sizeof(t_no_cv) == sizeof(unsigned short),
                signed short,
-               typename mpl::if_c<
+               typename conditional<
                   sizeof(t_no_cv) == sizeof(unsigned int),
                   int,
-                  typename mpl::if_c<
+                  typename conditional<
                      sizeof(t_no_cv) == sizeof(unsigned long),
                      long,
 #if defined(BOOST_HAS_LONG_LONG)
 #ifdef BOOST_HAS_INT128
-                     typename mpl::if_c<
+                     typename conditional<
                         sizeof(t_no_cv) == sizeof(boost::long_long_type), 
                         boost::long_long_type, 
                         boost::int128_type
@@ -124,28 +111,21 @@ struct make_signed_imp
    >::type base_integer_type;
    
    // Add back any const qualifier:
-   typedef typename mpl::if_<
-      is_const<T>,
+   typedef typename conditional<
+      is_const<T>::value,
       typename add_const<base_integer_type>::type,
       base_integer_type
    >::type const_base_integer_type;
-   
+public:
    // Add back any volatile qualifier:
-   typedef typename mpl::if_<
-      is_volatile<T>,
+   typedef typename conditional<
+      is_volatile<T>::value,
       typename add_volatile<const_base_integer_type>::type,
       const_base_integer_type
    >::type type;
 };
 
-
-} // namespace detail
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(make_signed,T,typename boost::detail::make_signed_imp<T>::type)
-
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
 
index 239153a863716bb5367948bd54ab725444743661..4b21ebaeb26d417fa91195321f676f7168b5e74f 100644 (file)
@@ -9,7 +9,7 @@
 #ifndef BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED
 #define BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED
 
-#include <boost/mpl/if.hpp>
+#include <boost/type_traits/conditional.hpp>
 #include <boost/type_traits/is_integral.hpp>
 #include <boost/type_traits/is_signed.hpp>
 #include <boost/type_traits/is_unsigned.hpp>
 #include <boost/type_traits/is_volatile.hpp>
 #include <boost/type_traits/add_const.hpp>
 #include <boost/type_traits/add_volatile.hpp>
-#include <boost/type_traits/detail/ice_or.hpp>
-#include <boost/type_traits/detail/ice_and.hpp>
-#include <boost/type_traits/detail/ice_not.hpp>
 #include <boost/static_assert.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
-namespace detail {
-
 template <class T>
-struct make_unsigned_imp
+struct make_unsigned
 {
-   BOOST_STATIC_ASSERT(
-      (::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_enum<T>::value>::value));
-   BOOST_STATIC_ASSERT(
-      (::boost::type_traits::ice_not< ::boost::is_same<
-         typename remove_cv<T>::type, bool>::value>::value));
+private:
+   BOOST_STATIC_ASSERT_MSG((::boost::is_integral<T>::value || ::boost::is_enum<T>::value), "The template argument to make_unsigned must be an integer or enum type.");
+   BOOST_STATIC_ASSERT_MSG((! ::boost::is_same<typename remove_cv<T>::type, bool>::value), "The template argument to make_unsigned must not be the type bool");
 
    typedef typename remove_cv<T>::type t_no_cv;
-   typedef typename mpl::if_c<
-      (::boost::type_traits::ice_and< 
-         ::boost::is_unsigned<T>::value,
-         ::boost::is_integral<T>::value,
-         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,
-         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,
-         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value >::value),
+   typedef typename conditional<
+      (::boost::is_unsigned<T>::value && ::boost::is_integral<T>::value 
+      && ! ::boost::is_same<t_no_cv, char>::value
+      && ! ::boost::is_same<t_no_cv, wchar_t>::value
+      && ! ::boost::is_same<t_no_cv, bool>::value),
       T,
-      typename mpl::if_c<
-         (::boost::type_traits::ice_and< 
-            ::boost::is_integral<T>::value,
-            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,
-            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,
-            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value>
-         ::value),
-         typename mpl::if_<
-            is_same<t_no_cv, signed char>,
+      typename conditional<
+         (::boost::is_integral<T>::value 
+         && ! ::boost::is_same<t_no_cv, char>::value
+         && ! ::boost::is_same<t_no_cv, wchar_t>::value
+         && ! ::boost::is_same<t_no_cv, bool>::value),
+         typename conditional<
+            is_same<t_no_cv, signed char>::value,
             unsigned char,
-            typename mpl::if_<
-               is_same<t_no_cv, short>,
+            typename conditional<
+               is_same<t_no_cv, short>::value,
                unsigned short,
-               typename mpl::if_<
-                  is_same<t_no_cv, int>,
+               typename conditional<
+                  is_same<t_no_cv, int>::value,
                   unsigned int,
-                  typename mpl::if_<
-                     is_same<t_no_cv, long>,
+                  typename conditional<
+                     is_same<t_no_cv, long>::value,
                      unsigned long,
 #if defined(BOOST_HAS_LONG_LONG)
 #ifdef BOOST_HAS_INT128
-                     typename mpl::if_c<
+                     typename conditional<
                         sizeof(t_no_cv) == sizeof(boost::ulong_long_type), 
                         boost::ulong_long_type, 
                         boost::uint128_type
@@ -89,21 +75,21 @@ struct make_unsigned_imp
             >::type
          >::type,
          // Not a regular integer type:
-         typename mpl::if_c<
+         typename conditional<
             sizeof(t_no_cv) == sizeof(unsigned char),
             unsigned char,
-            typename mpl::if_c<
+            typename conditional<
                sizeof(t_no_cv) == sizeof(unsigned short),
                unsigned short,
-               typename mpl::if_c<
+               typename conditional<
                   sizeof(t_no_cv) == sizeof(unsigned int),
                   unsigned int,
-                  typename mpl::if_c<
+                  typename conditional<
                      sizeof(t_no_cv) == sizeof(unsigned long),
                      unsigned long,
 #if defined(BOOST_HAS_LONG_LONG)
 #ifdef BOOST_HAS_INT128
-                     typename mpl::if_c<
+                     typename conditional<
                         sizeof(t_no_cv) == sizeof(boost::ulong_long_type), 
                         boost::ulong_long_type, 
                         boost::uint128_type
@@ -124,28 +110,21 @@ struct make_unsigned_imp
    >::type base_integer_type;
    
    // Add back any const qualifier:
-   typedef typename mpl::if_<
-      is_const<T>,
+   typedef typename conditional<
+      is_const<T>::value,
       typename add_const<base_integer_type>::type,
       base_integer_type
    >::type const_base_integer_type;
-   
+public:
    // Add back any volatile qualifier:
-   typedef typename mpl::if_<
-      is_volatile<T>,
+   typedef typename conditional<
+      is_volatile<T>::value,
       typename add_volatile<const_base_integer_type>::type,
       const_base_integer_type
    >::type type;
 };
 
-
-} // namespace detail
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(make_unsigned,T,typename boost::detail::make_unsigned_imp<T>::type)
-
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
 
index 60f6278badb9e8491c18b2533dff4e545576822b..587617a28789bfc43fd3664ee4b146922f1b34ab 100644 (file)
 #include <boost/type_traits/integral_promotion.hpp>
 #include <boost/type_traits/floating_point_promotion.hpp>
 
-// Should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
-namespace detail {
-
-template<class T>
-struct promote_impl
-  : public integral_promotion<
-        BOOST_DEDUCED_TYPENAME floating_point_promotion<T>::type
-      >
-{
-};
+template<class T> struct promote : public integral_promotion<typename floating_point_promotion<T>::type>{};
 
 }
 
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(
-      promote
-    , T
-    , BOOST_DEDUCED_TYPENAME boost::detail::promote_impl<T>::type
-    )
-}
-
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // #ifndef FILE_boost_type_traits_promote_hpp_INCLUDED
 
index 33f46c8eb8c07b6708a20604e27b8564fa1b2971..3dfc693687088c4d58f0d826ff39ddd597c05587 100644 (file)
@@ -10,8 +10,7 @@
 #ifndef BOOST_TT_RANK_HPP_INCLUDED
 #define BOOST_TT_RANK_HPP_INCLUDED
 
-// should be the last #include
-#include <boost/type_traits/detail/size_t_trait_def.hpp>
+#include <boost/type_traits/integral_constant.hpp>
 
 namespace boost {
 
@@ -77,13 +76,11 @@ struct rank_imp<T const volatile[], N>
 #endif // !defined( __CODEGEARC__ )
 
 #if defined( __CODEGEARC__ )
-BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(rank,T,__array_rank(T))
+template <class T> struct rank : public integral_constant<std::size_t, __array_rank(T)>{};
 #else
-BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(rank,T,(::boost::detail::rank_imp<T,0>::value))
+template <class T> struct rank : public integral_constant<std::size_t, (::boost::detail::rank_imp<T, 0>::value)>{};
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/size_t_trait_undef.hpp>
-
 #endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
index 1409da12cbd3ad1bcda25952e80631b5ca67c7b3..3ccdc9828148e38eb02b8abab2b7a052eb182bea 100644 (file)
 #include <cstddef>
 #include <boost/detail/workaround.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_all_extents,T,T)
+template <class T> struct remove_all_extents{ typedef T type; };
 
 #if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_all_extents,T[N],typename boost::remove_all_extents<T>::type type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_all_extents,T const[N],typename boost::remove_all_extents<T const>::type type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_all_extents,T volatile[N],typename boost::remove_all_extents<T volatile>::type type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_all_extents,T const volatile[N],typename boost::remove_all_extents<T const volatile>::type type)
+template <class T, std::size_t N> struct remove_all_extents<T[N]> : public remove_all_extents<T>{};
+template <class T, std::size_t N> struct remove_all_extents<T const[N]> : public remove_all_extents<T const>{};
+template <class T, std::size_t N> struct remove_all_extents<T volatile[N]> : public remove_all_extents<T volatile>{};
+template <class T, std::size_t N> struct remove_all_extents<T const volatile[N]> : public remove_all_extents<T const volatile>{};
 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_all_extents,T[],typename boost::remove_all_extents<T>::type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_all_extents,T const[],typename boost::remove_all_extents<T const>::type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_all_extents,T volatile[],typename boost::remove_all_extents<T volatile>::type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_all_extents,T const volatile[],typename boost::remove_all_extents<T const volatile>::type)
+template <class T> struct remove_all_extents<T[]> : public remove_all_extents<T>{};
+template <class T> struct remove_all_extents<T const[]> : public remove_all_extents<T const>{};
+template <class T> struct remove_all_extents<T volatile[]> : public remove_all_extents<T volatile>{};
+template <class T> struct remove_all_extents<T const volatile[]> : public remove_all_extents<T const volatile>{};
 #endif
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
index 2d26348c69205cd6d83943dd7442fb15d7c78529..56988d24e014ddc32bc9c377df7292f7a612a05e 100644 (file)
@@ -9,32 +9,13 @@
 #ifndef BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
 #define BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
 
-#include <boost/config.hpp>
-#include <cstddef>
-#include <boost/detail/workaround.hpp>
+#include <boost/type_traits/remove_extent.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
+namespace boost 
+{
 
-namespace boost {
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_bounds,T,T)
-
-#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T[N],T type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T const[N],T const type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T volatile[N],T volatile type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T const volatile[N],T const volatile type)
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T[],T)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T const[],T const)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T volatile[],T volatile)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T const volatile[],T const volatile)
-#endif
-#endif
+template <class T> struct remove_bounds : public remove_extent<T> {};
 
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
index 10207813832ad473af80ba7875cca0d0940b1e9e..b47f8514602a1f6a336f94fc5730042d198c044e 100644 (file)
 #ifndef BOOST_TT_REMOVE_CONST_HPP_INCLUDED
 #define BOOST_TT_REMOVE_CONST_HPP_INCLUDED
 
-#include <boost/type_traits/is_volatile.hpp>
-#include <boost/type_traits/detail/cv_traits_impl.hpp>
 #include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
-
 #include <cstddef>
-
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
+#include <boost/detail/workaround.hpp>
 
 namespace boost {
 
+   //  convert a type T to a non-cv-qualified type - remove_const<T>
+   template <class T> struct remove_const{ typedef T type; };
+   template <class T> struct remove_const<T const>{ typedef T type; };
 
-namespace detail {
-
-template <typename T, bool is_vol>
-struct remove_const_helper
-{
-    typedef T type;
-};
-
-template <typename T>
-struct remove_const_helper<T, true>
-{
-    typedef T volatile type;
-};
-
-
-template <typename T>
-struct remove_const_impl
-{
-    typedef typename remove_const_helper<
-       typename cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::unqualified_type
-        , ::boost::is_volatile<T>::value
-        >::type type;
-};
-
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-//
-// We can't filter out rvalue_references at the same level as
-// references or we get ambiguities from msvc:
-//
-template <typename T>
-struct remove_const_impl<T&&>
-{
-    typedef T&& type;
-};
-#endif
-
-} // namespace detail
-
-// * convert a type T to non-const type - remove_const<T>
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_const,T,typename boost::detail::remove_const_impl<T>::type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_const,T&,T&)
 #if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_const,T const[N],T type[N])
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_const,T const volatile[N],T volatile type[N])
+   template <class T, std::size_t N> struct remove_const<T const[N]>{ typedef T type[N]; };
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+   template <class T> struct remove_const<T const[]>{ typedef T type[]; };
+#endif
 #endif
-
 
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_REMOVE_CONST_HPP_INCLUDED
index 9ba34a1eff0ebc29c3966203fbc769c806750286..b50607f2cee2ce052e4781daf8a6c700a0e942ed 100644 (file)
 #ifndef BOOST_TT_REMOVE_CV_HPP_INCLUDED
 #define BOOST_TT_REMOVE_CV_HPP_INCLUDED
 
-#include <boost/type_traits/detail/cv_traits_impl.hpp>
 #include <boost/config.hpp>
 #include <boost/detail/workaround.hpp>
-
 #include <cstddef>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
+   //  convert a type T to a non-cv-qualified type - remove_cv<T>
+template <class T> struct remove_cv{ typedef T type; };
+template <class T> struct remove_cv<T const>{ typedef T type;  };
+template <class T> struct remove_cv<T volatile>{ typedef T type; };
+template <class T> struct remove_cv<T const volatile>{ typedef T type; };
 
-namespace detail{
-
-template <class T>
-struct rvalue_ref_filter_rem_cv
-{
-   typedef typename boost::detail::cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::unqualified_type type;
-};
-
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-//
-// We can't filter out rvalue_references at the same level as
-// references or we get ambiguities from msvc:
-//
-template <class T>
-struct rvalue_ref_filter_rem_cv<T&&>
-{
-   typedef T&& type;
-};
-#endif
-
-}
-
-
-//  convert a type T to a non-cv-qualified type - remove_cv<T>
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_cv,T,typename boost::detail::rvalue_ref_filter_rem_cv<T>::type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_cv,T&,T&)
 #if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T const[N],T type[N])
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T volatile[N],T type[N])
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T const volatile[N],T type[N])
+template <class T, std::size_t N> struct remove_cv<T const[N]>{ typedef T type[N]; };
+template <class T, std::size_t N> struct remove_cv<T const volatile[N]>{ typedef T type[N]; };
+template <class T, std::size_t N> struct remove_cv<T volatile[N]>{ typedef T type[N]; };
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+template <class T> struct remove_cv<T const[]>{ typedef T type[]; };
+template <class T> struct remove_cv<T const volatile[]>{ typedef T type[]; };
+template <class T> struct remove_cv<T volatile[]>{ typedef T type[]; };
+#endif
 #endif
 
 
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_REMOVE_CV_HPP_INCLUDED
index 9c4cdff70bda60946858be463ebb1a3b9db80714..0b50a070346c05f198ce1983fbfe8abb7c01041c 100644 (file)
 #include <boost/detail/workaround.hpp>
 #include <cstddef>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_extent,T,T)
+template <class T> struct remove_extent{ typedef T type; };
 
 #if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_extent,T[N],T type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_extent,T const[N],T const type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_extent,T volatile[N],T volatile type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_extent,T const volatile[N],T const volatile type)
+template <typename T, std::size_t N> struct remove_extent<T[N]> { typedef T type; };
+template <typename T, std::size_t N> struct remove_extent<T const[N]> { typedef T const type; };
+template <typename T, std::size_t N> struct remove_extent<T volatile [N]> { typedef T volatile type; };
+template <typename T, std::size_t N> struct remove_extent<T const volatile [N]> { typedef T const volatile type; };
 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_extent,T[],T)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_extent,T const[],T const)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_extent,T volatile[],T volatile)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_extent,T const volatile[],T const volatile)
+template <typename T> struct remove_extent<T[]> { typedef T type; };
+template <typename T> struct remove_extent<T const[]> { typedef T const type; };
+template <typename T> struct remove_extent<T volatile[]> { typedef T volatile type; };
+template <typename T> struct remove_extent<T const volatile[]> { typedef T const volatile type; };
 #endif
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
index fef706860cda8cf9d8078726b43e8cdc697b5d20..fb79e59d2245dd5045e55715e2fb79ed804f4b20 100644 (file)
 #define BOOST_TT_REMOVE_POINTER_HPP_INCLUDED
 
 #include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
 
 #if defined(BOOST_MSVC)
 #include <boost/type_traits/remove_cv.hpp>
 #include <boost/type_traits/is_pointer.hpp>
 #endif
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
 #ifdef BOOST_MSVC
@@ -64,20 +60,18 @@ namespace detail{
    };
 }
 
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,typename boost::detail::remove_pointer_imp2<T>::type)
+template <class T> struct remove_pointer{ typedef typename boost::detail::remove_pointer_imp2<T>::type type; };
 
 #else
 
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,T)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T*,T)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* const,T)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* volatile,T)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* const volatile,T)
+template <class T> struct remove_pointer{ typedef T type; };
+template <class T> struct remove_pointer<T*>{ typedef T type; };
+template <class T> struct remove_pointer<T*const>{ typedef T type; };
+template <class T> struct remove_pointer<T*volatile>{ typedef T type; };
+template <class T> struct remove_pointer<T*const volatile>{ typedef T type; };
 
 #endif
 
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_REMOVE_POINTER_HPP_INCLUDED
index c59e7e35f4874dcd1ccbe8b36ca6e39f34291575..f75e67783bb8c0800bb31eed3f965b7461dbaf10 100644 (file)
@@ -12,9 +12,6 @@
 #include <boost/config.hpp>
 #include <boost/detail/workaround.hpp>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
 
@@ -38,22 +35,20 @@ struct remove_rvalue_ref<T&&>
 
 } // namespace detail
 
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,typename boost::detail::remove_rvalue_ref<T>::type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T&,T)
+template <class T> struct remove_reference{ typedef typename boost::detail::remove_rvalue_ref<T>::type type; };
+template <class T> struct remove_reference<T&>{ typedef T type; };
 
 #if defined(BOOST_ILLEGAL_CV_REFERENCES)
 // these are illegal specialisations; cv-qualifies applied to
 // references have no effect according to [8.3.2p1],
 // C++ Builder requires them though as it treats cv-qualified
 // references as distinct types...
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const,T)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& volatile,T)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const volatile,T)
+template <class T> struct remove_reference<T&const>{ typedef T type; };
+template <class T> struct remove_reference<T&volatile>{ typedef T type; };
+template <class T> struct remove_reference<T&const volatile>{ typedef T type; };
 #endif
 
 
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
index c20277696d81949d114edde83b86bb7a027b632c..475e39d22c4137e3b2c5cebfca0aef0f6275725f 100644 (file)
 #ifndef BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED
 #define BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED
 
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/detail/cv_traits_impl.hpp>
 #include <boost/config.hpp>
 #include <boost/detail/workaround.hpp>
-
 #include <cstddef>
 
-// should be the last #include
-#include <boost/type_traits/detail/type_trait_def.hpp>
-
 namespace boost {
 
+   //  convert a type T to a non-cv-qualified type - remove_volatile<T>
+   template <class T> struct remove_volatile{ typedef T type; };
+   template <class T> struct remove_volatile<T volatile>{ typedef T type; };
 
-namespace detail {
-
-template <typename T, bool is_const>
-struct remove_volatile_helper
-{
-    typedef T type;
-};
-
-template <typename T>
-struct remove_volatile_helper<T,true>
-{
-    typedef T const type;
-};
-
-template <typename T>
-struct remove_volatile_impl
-{
-    typedef typename remove_volatile_helper<
-       typename cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::unqualified_type
-        , ::boost::is_const<T>::value
-        >::type type;
-};
-
-//
-// We can't filter out rvalue_references at the same level as
-// references or we get ambiguities from msvc:
-//
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-template <typename T>
-struct remove_volatile_impl<T&&>
-{
-    typedef T&& type;
-};
-#endif
-} // namespace detail
-
-// * convert a type T to a non-volatile type - remove_volatile<T>
-
-BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_volatile,T,typename boost::detail::remove_volatile_impl<T>::type)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_volatile,T&,T&)
 #if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_volatile,T volatile[N],T type[N])
-BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_volatile,T const volatile[N],T const type[N])
+   template <class T, std::size_t N> struct remove_volatile<T volatile[N]>{ typedef T type[N]; };
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+   template <class T> struct remove_volatile<T volatile[]>{ typedef T type[]; };
+#endif
 #endif
 
 
 } // namespace boost
 
-#include <boost/type_traits/detail/type_trait_undef.hpp>
-
 #endif // BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED
diff --git a/3rdparty/boost/boost/type_traits/type_identity.hpp b/3rdparty/boost/boost/type_traits/type_identity.hpp
new file mode 100644 (file)
index 0000000..6d2dd5b
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef BOOST_TYPE_TRAITS_TYPE_IDENTITY_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_TYPE_IDENTITY_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+namespace boost
+{
+
+template<class T> struct type_identity
+{
+    typedef T type;
+};
+
+} // namespace boost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_TYPE_IDENTITY_HPP_INCLUDED
index 7eb66a702f88b4380fdb18c08161fc15ebc4edb6..ffa054a2f17f26952ccaf2da8e3ce1c4a07ea33d 100644 (file)
 #ifndef BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED
 #define BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED
 
-#include <boost/mpl/if.hpp>
-#include <boost/preprocessor/list/for_each_i.hpp>
-#include <boost/preprocessor/tuple/to_list.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/list/transform.hpp>
-#include <boost/preprocessor/list/append.hpp>
 #include <boost/type_traits/alignment_of.hpp>
 #include <boost/type_traits/is_pod.hpp>
 #include <boost/static_assert.hpp>
 #include <boost/config.hpp>
-
-// should be the last #include
-#include <boost/type_traits/detail/bool_trait_def.hpp>
-
 #include <cstddef>
+#include <boost/detail/workaround.hpp>
 
 #ifdef BOOST_MSVC
 #   pragma warning(push)
 #   pragma warning(disable: 4121) // alignment is sensitive to packing
 #endif
 
+#ifdef _MSC_VER
+#include <boost/type_traits/conditional.hpp>
+#endif
+
 namespace boost {
+   namespace detail{
 
 #ifndef __BORLANDC__
 
-namespace detail {
-
-class alignment_dummy;
-typedef void (*function_ptr)();
-typedef int (alignment_dummy::*member_ptr);
-typedef int (alignment_dummy::*member_function_ptr)();
-
-#ifdef BOOST_HAS_LONG_LONG
-#define BOOST_TT_ALIGNMENT_BASE_TYPES BOOST_PP_TUPLE_TO_LIST( \
-        12, ( \
-        char, short, int, long,  ::boost::long_long_type, float, double, long double \
-        , void*, function_ptr, member_ptr, member_function_ptr))
-#else
-#define BOOST_TT_ALIGNMENT_BASE_TYPES BOOST_PP_TUPLE_TO_LIST( \
-        11, ( \
-        char, short, int, long, float, double, long double \
-        , void*, function_ptr, member_ptr, member_function_ptr))
+      union max_align
+      {
+         char c;
+         short s;
+         int i;
+         long l;
+#ifndef BOOST_NO_LONG_LONG
+         boost::long_long_type ll;
 #endif
+#ifdef BOOST_HAS_INT128
+         boost::int128_type i128;
+#endif
+         float f;
+         double d;
+         long double ld;
+#ifdef BOOST_HAS_FLOAT128
+         __float128 f128;
+#endif
+      };
 
-#define BOOST_TT_HAS_ONE_T(D,Data,T) boost::detail::has_one_T< T >
-
-#define BOOST_TT_ALIGNMENT_STRUCT_TYPES                         \
-        BOOST_PP_LIST_TRANSFORM(BOOST_TT_HAS_ONE_T,             \
-                                X,                              \
-                                BOOST_TT_ALIGNMENT_BASE_TYPES)
-
-#define BOOST_TT_ALIGNMENT_TYPES                                \
-        BOOST_PP_LIST_APPEND(BOOST_TT_ALIGNMENT_BASE_TYPES,     \
-                             BOOST_TT_ALIGNMENT_STRUCT_TYPES)
-
-//
-// lower_alignment_helper --
-//
-// This template gets instantiated a lot, so use partial
-// specialization when available to reduce the compiler burden.
-//
-template <bool found, std::size_t target, class TestType>
-struct lower_alignment_helper
-{
-    typedef char type;
-    enum { value = true };
-};
-
-template <std::size_t target, class TestType>
-struct lower_alignment_helper<false,target,TestType>
-{
-    enum { value = (alignment_of<TestType>::value == target) };
-    typedef typename mpl::if_c<value, TestType, char>::type type;
-};
-
-#define BOOST_TT_CHOOSE_MIN_ALIGNMENT(R,P,I,T)                                  \
-        typename lower_alignment_helper<                                        \
-          BOOST_PP_CAT(found,I),target,T                                        \
-        >::type BOOST_PP_CAT(t,I);                                              \
-        enum {                                                                  \
-            BOOST_PP_CAT(found,BOOST_PP_INC(I))                                 \
-              = lower_alignment_helper<BOOST_PP_CAT(found,I),target,T >::value  \
-        };
-
-#define BOOST_TT_CHOOSE_T(R,P,I,T) T BOOST_PP_CAT(t,I);
-
-template <typename T>
-struct has_one_T
-{
-  T data;
-};
-
-template <std::size_t target>
-union lower_alignment
-{
-    enum { found0 = false };
-
-    BOOST_PP_LIST_FOR_EACH_I(
-          BOOST_TT_CHOOSE_MIN_ALIGNMENT
-        , ignored
-        , BOOST_TT_ALIGNMENT_TYPES
-        )
-};
-
-union max_align
-{
-    BOOST_PP_LIST_FOR_EACH_I(
-          BOOST_TT_CHOOSE_T
-        , ignored
-        , BOOST_TT_ALIGNMENT_TYPES
-        )
-};
-
-#undef BOOST_TT_ALIGNMENT_BASE_TYPES
-#undef BOOST_TT_HAS_ONE_T
-#undef BOOST_TT_ALIGNMENT_STRUCT_TYPES
-#undef BOOST_TT_ALIGNMENT_TYPES
-#undef BOOST_TT_CHOOSE_MIN_ALIGNMENT
-#undef BOOST_TT_CHOOSE_T
-
-template<std::size_t TAlign, std::size_t Align>
-struct is_aligned
-{
-    BOOST_STATIC_CONSTANT(bool,
-        value = (TAlign >= Align) & (TAlign % Align == 0)
-        );
-};
-
+template <std::size_t Target, bool check> struct long_double_alignment{ typedef long double type; };
+template <std::size_t Target> struct long_double_alignment<Target, false>{ typedef boost::detail::max_align type; };
 
-} // namespace detail
+template <std::size_t Target, bool check> struct double_alignment{ typedef double type; };
+template <std::size_t Target> struct double_alignment<Target, false>{ typedef typename long_double_alignment<Target, boost::alignment_of<long double>::value >= Target>::type type; };
 
-template<std::size_t Align>
-struct is_pod< ::boost::detail::lower_alignment<Align> >
-{
-        BOOST_STATIC_CONSTANT(std::size_t, value = true);
-};
-
-// This alignment method originally due to Brian Parker, implemented by David
-// Abrahams, and then ported here by Doug Gregor.
-namespace detail{
+#ifndef BOOST_NO_LONG_LONG
+template <std::size_t Target, bool check> struct long_long_alignment{ typedef boost::long_long_type type; };
+template <std::size_t Target> struct long_long_alignment<Target, false>{ typedef typename double_alignment<Target, boost::alignment_of<double>::value >= Target>::type type; };
+#endif
 
-template <std::size_t Align>
-class type_with_alignment_imp
-{
-    typedef ::boost::detail::lower_alignment<Align> t1;
-    typedef typename mpl::if_c<
-          ::boost::detail::is_aligned< ::boost::alignment_of<t1>::value,Align >::value
-        , t1
-        , ::boost::detail::max_align
-        >::type align_t;
+template <std::size_t Target, bool check> struct long_alignment{ typedef long type; };
+#ifndef BOOST_NO_LONG_LONG
+template <std::size_t Target> struct long_alignment<Target, false>{ typedef typename long_long_alignment<Target, boost::alignment_of<boost::long_long_type>::value >= Target>::type type; };
+#else
+template <std::size_t Target> struct long_alignment<Target, false>{ typedef typename double_alignment<Target, boost::alignment_of<double>::value >= Target>::type type; };
+#endif
 
-    BOOST_STATIC_CONSTANT(std::size_t, found = alignment_of<align_t>::value);
+template <std::size_t Target, bool check> struct int_alignment{ typedef int type; };
+template <std::size_t Target> struct int_alignment<Target, false>{ typedef typename long_alignment<Target, boost::alignment_of<long>::value >= Target>::type type; };
 
-    BOOST_STATIC_ASSERT(found >= Align);
-    BOOST_STATIC_ASSERT(found % Align == 0);
+template <std::size_t Target, bool check> struct short_alignment{ typedef short type; };
+template <std::size_t Target> struct short_alignment<Target, false>{ typedef typename int_alignment<Target, boost::alignment_of<int>::value >= Target>::type type; };
 
- public:
-    typedef align_t type;
-};
+template <std::size_t Target, bool check> struct char_alignment{ typedef char type; };
+template <std::size_t Target> struct char_alignment<Target, false>{ typedef typename short_alignment<Target, boost::alignment_of<short>::value >= Target>::type type; };
 
 }
 
 template <std::size_t Align>
-class type_with_alignment 
-  : public ::boost::detail::type_with_alignment_imp<Align>
+struct type_with_alignment 
 {
+   typedef typename boost::detail::char_alignment<Align, boost::alignment_of<char>::value >= Align>::type type;
 };
 
-#if defined(__GNUC__) || (defined (__SUNPRO_CC) &&  (__SUNPRO_CC >= 0x5130))
+#if (defined(__GNUC__) || (defined (__SUNPRO_CC) &&  (__SUNPRO_CC >= 0x5130)) || defined(__clang__)) && !defined(BOOST_TT_DISABLE_INTRINSICS)
 namespace tt_align_ns {
 struct __attribute__((__aligned__(2))) a2 {};
 struct __attribute__((__aligned__(4))) a4 {};
@@ -187,26 +95,25 @@ struct __attribute__((__aligned__(64))) a64 {};
 struct __attribute__((__aligned__(128))) a128 {};
 }
 
-template<> class type_with_alignment<1>  { public: typedef char type; };
-template<> class type_with_alignment<2>  { public: typedef tt_align_ns::a2 type; };
-template<> class type_with_alignment<4>  { public: typedef tt_align_ns::a4 type; };
-template<> class type_with_alignment<8>  { public: typedef tt_align_ns::a8 type; };
-template<> class type_with_alignment<16> { public: typedef tt_align_ns::a16 type; };
-template<> class type_with_alignment<32> { public: typedef tt_align_ns::a32 type; };
-template<> class type_with_alignment<64> { public: typedef tt_align_ns::a64 type; };
-template<> class type_with_alignment<128> { public: typedef tt_align_ns::a128 type; };
+template<> struct type_with_alignment<1>  { public: typedef char type; };
+template<> struct type_with_alignment<2>  { public: typedef tt_align_ns::a2 type; };
+template<> struct type_with_alignment<4>  { public: typedef tt_align_ns::a4 type; };
+template<> struct type_with_alignment<8>  { public: typedef tt_align_ns::a8 type; };
+template<> struct type_with_alignment<16> { public: typedef tt_align_ns::a16 type; };
+template<> struct type_with_alignment<32> { public: typedef tt_align_ns::a32 type; };
+template<> struct type_with_alignment<64> { public: typedef tt_align_ns::a64 type; };
+template<> struct type_with_alignment<128> { public: typedef tt_align_ns::a128 type; };
+
+template<> struct is_pod< ::boost::tt_align_ns::a2> : public true_type{};
+template<> struct is_pod< ::boost::tt_align_ns::a4> : public true_type{};
+template<> struct is_pod< ::boost::tt_align_ns::a8> : public true_type{};
+template<> struct is_pod< ::boost::tt_align_ns::a16> : public true_type{};
+template<> struct is_pod< ::boost::tt_align_ns::a32> : public true_type{};
+template<> struct is_pod< ::boost::tt_align_ns::a64> : public true_type{};
+template<> struct is_pod< ::boost::tt_align_ns::a128> : public true_type{};
 
-namespace detail {
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a2,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a4,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a8,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a16,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a32,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a64,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a128,true)
-}
 #endif
-#if defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))
+#if (defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))) && !defined(BOOST_TT_DISABLE_INTRINSICS)
 //
 // MSVC supports types which have alignments greater than the normal
 // maximum: these are used for example in the types __m64 and __m128
@@ -247,57 +154,56 @@ struct __declspec(align(128)) a128 {
 };
 }
 
-template<> class type_with_alignment<8>  
+template<> struct type_with_alignment<8>  
 { 
-   typedef mpl::if_c<
+   typedef boost::conditional<
       ::boost::alignment_of<boost::detail::max_align>::value < 8,
       tt_align_ns::a8,
-      boost::detail::type_with_alignment_imp<8> >::type t1; 
+      boost::detail::char_alignment<8, false> >::type t1;
 public: 
    typedef t1::type type;
 };
-template<> class type_with_alignment<16> 
+template<> struct type_with_alignment<16> 
 { 
-   typedef mpl::if_c<
+   typedef boost::conditional<
       ::boost::alignment_of<boost::detail::max_align>::value < 16,
       tt_align_ns::a16,
-      boost::detail::type_with_alignment_imp<16> >::type t1; 
+      boost::detail::char_alignment<16, false> >::type t1;
 public: 
    typedef t1::type type;
 };
-template<> class type_with_alignment<32> 
+template<> struct type_with_alignment<32> 
 { 
-   typedef mpl::if_c<
+   typedef boost::conditional<
       ::boost::alignment_of<boost::detail::max_align>::value < 32,
       tt_align_ns::a32,
-      boost::detail::type_with_alignment_imp<32> >::type t1; 
+      boost::detail::char_alignment<32, false> >::type t1;
 public: 
    typedef t1::type type;
 };
-template<> class type_with_alignment<64> {
-   typedef mpl::if_c<
+template<> struct type_with_alignment<64> {
+   typedef boost::conditional<
       ::boost::alignment_of<boost::detail::max_align>::value < 64,
       tt_align_ns::a64,
-      boost::detail::type_with_alignment_imp<64> >::type t1; 
+      boost::detail::char_alignment<64, false> >::type t1;
 public: 
    typedef t1::type type;
 };
-template<> class type_with_alignment<128> {
-   typedef mpl::if_c<
+template<> struct type_with_alignment<128> {
+   typedef boost::conditional<
       ::boost::alignment_of<boost::detail::max_align>::value < 128,
       tt_align_ns::a128,
-      boost::detail::type_with_alignment_imp<128> >::type t1; 
+      boost::detail::char_alignment<128, false> >::type t1;
 public: 
    typedef t1::type type;
 };
 
-namespace detail {
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a8,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a16,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a32,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a64,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a128,true)
-}
+template<> struct is_pod< ::boost::tt_align_ns::a8> : public true_type{};
+template<> struct is_pod< ::boost::tt_align_ns::a16> : public true_type{};
+template<> struct is_pod< ::boost::tt_align_ns::a32> : public true_type{};
+template<> struct is_pod< ::boost::tt_align_ns::a64> : public true_type{};
+template<> struct is_pod< ::boost::tt_align_ns::a128> : public true_type{};
+
 #endif
 
 #else
@@ -321,13 +227,13 @@ namespace detail {
 
 typedef ::boost::tt_align_ns::a16 max_align;
 
+}
 //#if ! BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610))
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a2,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a4,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a8,true)
-BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::tt_align_ns::a16,true)
+template <> struct is_pod< ::boost::tt_align_ns::a2> : public true_type{};
+template <> struct is_pod< ::boost::tt_align_ns::a4> : public true_type{};
+template <> struct is_pod< ::boost::tt_align_ns::a8> : public true_type{};
+template <> struct is_pod< ::boost::tt_align_ns::a16> : public true_type{};
 //#endif
-}
 
 template <std::size_t N> struct type_with_alignment
 {
@@ -350,8 +256,6 @@ template <> struct type_with_alignment<16>{ typedef tt_align_ns::a16 type; };
 #   pragma warning(pop)
 #endif
 
-#include <boost/type_traits/detail/bool_trait_undef.hpp>
-
 #endif // BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED
 
 
diff --git a/3rdparty/boost/boost/utility/declval.hpp b/3rdparty/boost/boost/utility/declval.hpp
deleted file mode 100644 (file)
index a4ab2c8..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-//  declval.hpp  -------------------------------------------------------------//
-
-//  Copyright 2010 Vicente J. Botet Escriba
-
-//  Distributed under the Boost Software License, Version 1.0.
-//  See http://www.boost.org/LICENSE_1_0.txt
-
-#ifndef BOOST_UTILITY_DECLVAL_HPP
-#define BOOST_UTILITY_DECLVAL_HPP
-
-#include <boost/config.hpp>
-
-//----------------------------------------------------------------------------//
-
-#include <boost/type_traits/add_rvalue_reference.hpp>
-
-//----------------------------------------------------------------------------//
-//                                                                            //
-//                           C++03 implementation of                          //
-//                   20.2.4 Function template declval [declval]               //
-//                          Written by Vicente J. Botet Escriba               //
-//                                                                            //
-// 1 The library provides the function template declval to simplify the
-// definition of expressions which occur as unevaluated operands.
-// 2 Remarks: If this function is used, the program is ill-formed.
-// 3 Remarks: The template parameter T of declval may be an incomplete type.
-// [ Example:
-//
-// template <class To, class From>
-// decltype(static_cast<To>(declval<From>())) convert(From&&);
-//
-// declares a function template convert which only participates in overloading
-// if the type From can be explicitly converted to type To. For another example
-// see class template common_type (20.9.7.6). -end example ]
-//----------------------------------------------------------------------------//
-
-namespace boost {
-
-    template <typename T>
-    typename add_rvalue_reference<T>::type declval() BOOST_NOEXCEPT; // as unevaluated operand
-
-}  // namespace boost
-
-#endif  // BOOST_UTILITY_DECLVAL_HPP
diff --git a/3rdparty/boost/boost/utility/value_init.hpp b/3rdparty/boost/boost/utility/value_init.hpp
deleted file mode 100644 (file)
index 9d8de70..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-// (C) Copyright 2002-2008, Fernando Luis Cacciola Carballal.
-//
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-//
-// 21 Ago 2002 (Created) Fernando Cacciola
-// 24 Dec 2007 (Refactored and worked around various compiler bugs) Fernando Cacciola, Niels Dekker
-// 23 May 2008 (Fixed operator= const issue, added initialized_value) Niels Dekker, Fernando Cacciola
-// 21 Ago 2008 (Added swap) Niels Dekker, Fernando Cacciola
-// 20 Feb 2009 (Fixed logical const-ness issues) Niels Dekker, Fernando Cacciola
-// 03 Apr 2010 (Added initialized<T>, suggested by Jeffrey Hellrung, fixing #3472) Niels Dekker
-// 30 May 2010 (Made memset call conditional, fixing #3869) Niels Dekker
-//
-#ifndef BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP
-#define BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP
-
-// Note: The implementation of boost::value_initialized had to deal with the
-// fact that various compilers haven't fully implemented value-initialization.
-// The constructor of boost::value_initialized<T> works around these compiler
-// issues, by clearing the bytes of T, before constructing the T object it
-// contains. More details on these issues are at libs/utility/value_init.htm
-
-#include <boost/aligned_storage.hpp>
-#include <boost/config.hpp> // For BOOST_NO_COMPLETE_VALUE_INITIALIZATION.
-#include <boost/detail/workaround.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/cv_traits.hpp>
-#include <boost/type_traits/alignment_of.hpp>
-#include <boost/swap.hpp>
-#include <cstring>
-#include <new>
-
-#ifdef BOOST_MSVC
-#pragma warning(push)
-// It is safe to ignore the following warning from MSVC 7.1 or higher:
-// "warning C4351: new behavior: elements of array will be default initialized"
-#pragma warning(disable: 4351)
-// It is safe to ignore the following MSVC warning, which may pop up when T is 
-// a const type: "warning C4512: assignment operator could not be generated".
-#pragma warning(disable: 4512)
-#endif
-
-#ifdef BOOST_NO_COMPLETE_VALUE_INITIALIZATION
-  // Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED 
-  // suggests that a workaround should be applied, because of compiler issues 
-  // regarding value-initialization.
-  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED
-#endif
-
-// Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND
-// switches the value-initialization workaround either on or off.
-#ifndef BOOST_DETAIL_VALUE_INIT_WORKAROUND
-  #ifdef BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED
-  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND 1
-  #else
-  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND 0
-  #endif
-#endif
-
-namespace boost {
-
-template<class T>
-class initialized
-{
-  private :
-    struct wrapper
-    {
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
-      typename
-#endif 
-      remove_const<T>::type data;
-
-      BOOST_GPU_ENABLED
-      wrapper()
-      :
-      data()
-      {
-      }
-
-      BOOST_GPU_ENABLED
-      wrapper(T const & arg)
-      :
-      data(arg)
-      {
-      }
-    };
-
-    mutable
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
-      typename
-#endif 
-      aligned_storage<sizeof(wrapper), alignment_of<wrapper>::value>::type x;
-
-    BOOST_GPU_ENABLED
-    wrapper * wrapper_address() const
-    {
-      return static_cast<wrapper *>( static_cast<void*>(&x));
-    }
-
-  public :
-
-    BOOST_GPU_ENABLED
-    initialized()
-    {
-#if BOOST_DETAIL_VALUE_INIT_WORKAROUND
-      std::memset(&x, 0, sizeof(x));
-#endif
-      new (wrapper_address()) wrapper();
-    }
-
-    BOOST_GPU_ENABLED
-    initialized(initialized const & arg)
-    {
-      new (wrapper_address()) wrapper( static_cast<wrapper const &>(*(arg.wrapper_address())));
-    }
-
-    BOOST_GPU_ENABLED
-    explicit initialized(T const & arg)
-    {
-      new (wrapper_address()) wrapper(arg);
-    }
-
-    BOOST_GPU_ENABLED
-    initialized & operator=(initialized const & arg)
-    {
-      // Assignment is only allowed when T is non-const.
-      BOOST_STATIC_ASSERT( ! is_const<T>::value );
-      *wrapper_address() = static_cast<wrapper const &>(*(arg.wrapper_address()));
-      return *this;
-    }
-
-    BOOST_GPU_ENABLED
-    ~initialized()
-    {
-      wrapper_address()->wrapper::~wrapper();
-    }
-
-    BOOST_GPU_ENABLED
-    T const & data() const
-    {
-      return wrapper_address()->data;
-    }
-
-    BOOST_GPU_ENABLED
-    T& data()
-    {
-      return wrapper_address()->data;
-    }
-
-    BOOST_GPU_ENABLED
-    void swap(initialized & arg)
-    {
-      ::boost::swap( this->data(), arg.data() );
-    }
-
-    BOOST_GPU_ENABLED
-    operator T const &() const
-    {
-      return wrapper_address()->data;
-    }
-
-    BOOST_GPU_ENABLED
-    operator T&()
-    {
-      return wrapper_address()->data;
-    }
-
-} ;
-
-template<class T>
-BOOST_GPU_ENABLED
-T const& get ( initialized<T> const& x )
-{
-  return x.data() ;
-}
-
-template<class T>
-BOOST_GPU_ENABLED
-T& get ( initialized<T>& x )
-{
-  return x.data() ;
-}
-
-template<class T>
-BOOST_GPU_ENABLED
-void swap ( initialized<T> & lhs, initialized<T> & rhs )
-{
-  lhs.swap(rhs) ;
-}
-
-template<class T>
-class value_initialized
-{
-  private :
-
-    // initialized<T> does value-initialization by default.
-    initialized<T> m_data;
-
-  public :
-    
-    BOOST_GPU_ENABLED
-    value_initialized()
-    :
-    m_data()
-    { }
-    
-    BOOST_GPU_ENABLED
-    T const & data() const
-    {
-      return m_data.data();
-    }
-
-    BOOST_GPU_ENABLED
-    T& data()
-    {
-      return m_data.data();
-    }
-
-    BOOST_GPU_ENABLED
-    void swap(value_initialized & arg)
-    {
-      m_data.swap(arg.m_data);
-    }
-
-    BOOST_GPU_ENABLED
-    operator T const &() const
-    {
-      return m_data;
-    }
-
-    BOOST_GPU_ENABLED
-    operator T&()
-    {
-      return m_data;
-    }
-} ;
-
-
-template<class T>
-BOOST_GPU_ENABLED
-T const& get ( value_initialized<T> const& x )
-{
-  return x.data() ;
-}
-
-template<class T>
-BOOST_GPU_ENABLED
-T& get ( value_initialized<T>& x )
-{
-  return x.data() ;
-}
-
-template<class T>
-BOOST_GPU_ENABLED
-void swap ( value_initialized<T> & lhs, value_initialized<T> & rhs )
-{
-  lhs.swap(rhs) ;
-}
-
-
-class initialized_value_t
-{
-  public :
-    
-    template <class T> BOOST_GPU_ENABLED operator T() const
-    {
-      return initialized<T>().data();
-    }
-};
-
-initialized_value_t const initialized_value = {} ;
-
-
-} // namespace boost
-
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
-
-#endif
index 7b64aedb1b39312edfaf3f58c7e5831ec745badb..fce02ec7ba9c54d250e53750c8052833bd74bb7a 100644 (file)
@@ -19,7 +19,7 @@
 //  BOOST_VERSION / 100 % 1000 is the minor version
 //  BOOST_VERSION / 100000 is the major version
 
-#define BOOST_VERSION 105900
+#define BOOST_VERSION 106000
 
 //
 //  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
@@ -27,6 +27,6 @@
 //  number, y is the minor version number, and z is the patch level if not 0.
 //  This is used by <config/auto_link.hpp> to select which library version to link to.
 
-#define BOOST_LIB_VERSION "1_59"
+#define BOOST_LIB_VERSION "1_60"
 
 #endif
index 23ec32474a1bb5f85dc7b5f13943a19995627b89..a0b52ee4e93027f09d728a11cc86159df063f1a1 100644 (file)
@@ -77,7 +77,7 @@ c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::transfo
 c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::transform_primary(const char* p1, const char* p2)
 {
    static char s_delim;
-   static const int s_collate_type = ::boost::re_detail::find_sort_syntax(static_cast<c_regex_traits<char>*>(0), &s_delim);
+   static const int s_collate_type = ::boost::BOOST_REGEX_DETAIL_NS::find_sort_syntax(static_cast<c_regex_traits<char>*>(0), &s_delim);
    std::string result;
    //
    // What we do here depends upon the format of the sort key returned by
@@ -85,8 +85,8 @@ c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::transfo
    //
    switch(s_collate_type)
    {
-   case ::boost::re_detail::sort_C:
-   case ::boost::re_detail::sort_unknown:
+   case ::boost::BOOST_REGEX_DETAIL_NS::sort_C:
+   case ::boost::BOOST_REGEX_DETAIL_NS::sort_unknown:
       // the best we can do is translate to lower case, then get a regular sort key:
       {
          result.assign(p1, p2);
@@ -95,14 +95,14 @@ c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::transfo
          result = transform(&*result.begin(), &*result.begin() + result.size());
          break;
       }
-   case ::boost::re_detail::sort_fixed:
+   case ::boost::BOOST_REGEX_DETAIL_NS::sort_fixed:
       {
          // get a regular sort key, and then truncate it:
          result = transform(p1, p2);
          result.erase(s_delim);
          break;
       }
-   case ::boost::re_detail::sort_delim:
+   case ::boost::BOOST_REGEX_DETAIL_NS::sort_delim:
          // get a regular sort key, and then truncate everything after the delim:
          result = transform(p1, p2);
          if(result.size() && (result[0] == s_delim))
@@ -149,13 +149,13 @@ c_regex_traits<char>::char_class_type BOOST_REGEX_CALL c_regex_traits<char>::loo
       char_class_xdigit,
    };
 
-   int idx = ::boost::re_detail::get_default_class_id(p1, p2);
+   int idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2);
    if(idx < 0)
    {
       std::string s(p1, p2);
       for(std::string::size_type i = 0; i < s.size(); ++i)
          s[i] = static_cast<char>((std::tolower)(static_cast<unsigned char>(s[i])));
-      idx = ::boost::re_detail::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
+      idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
    }
    BOOST_ASSERT(std::size_t(idx+1) < sizeof(masks) / sizeof(masks[0]));
    return masks[idx+1];
@@ -173,16 +173,16 @@ bool BOOST_REGEX_CALL c_regex_traits<char>::isctype(char c, char_class_type mask
       || ((mask & char_class_digit) && (std::isdigit)(static_cast<unsigned char>(c)))
       || ((mask & char_class_punct) && (std::ispunct)(static_cast<unsigned char>(c)))
       || ((mask & char_class_xdigit) && (std::isxdigit)(static_cast<unsigned char>(c)))
-      || ((mask & char_class_blank) && (std::isspace)(static_cast<unsigned char>(c)) && !::boost::re_detail::is_separator(c))
+      || ((mask & char_class_blank) && (std::isspace)(static_cast<unsigned char>(c)) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c))
       || ((mask & char_class_word) && (c == '_'))
-      || ((mask & char_class_vertical) && (::boost::re_detail::is_separator(c) || (c == '\v')))
-      || ((mask & char_class_horizontal) && (std::isspace)(static_cast<unsigned char>(c)) && !::boost::re_detail::is_separator(c) && (c != '\v'));
+      || ((mask & char_class_vertical) && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == '\v')))
+      || ((mask & char_class_horizontal) && (std::isspace)(static_cast<unsigned char>(c)) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) && (c != '\v'));
 }
 
 c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::lookup_collatename(const char* p1, const char* p2)
 {
    std::string s(p1, p2);
-   s = ::boost::re_detail::lookup_default_collate_name(s);
+   s = ::boost::BOOST_REGEX_DETAIL_NS::lookup_default_collate_name(s);
    if(s.empty() && (p2-p1 == 1))
       s.append(1, *p1);
    return s;
index 1d24cc1a5ffab82d5d1eeda33bccd3f73225648b..05bbc50d725e570c14a34ef4c9fb7511aeee4789 100644 (file)
@@ -28,7 +28,7 @@ namespace std{
 }
 #endif
 
-namespace boost{ namespace re_detail{
+namespace boost{ namespace BOOST_REGEX_DETAIL_NS{
 
 void cpp_regex_traits_char_layer<char>::init() 
 {
@@ -51,7 +51,7 @@ void cpp_regex_traits_char_layer<char>::init()
       {
          std::string m("Unable to open message catalog: ");
          std::runtime_error err(m + cat_name);
-         boost::re_detail::raise_runtime_error(err);
+         boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err);
       }
    }
    //
@@ -111,7 +111,7 @@ void cpp_regex_traits_char_layer<char>::init()
    }while(0xFF != i++);
 }
 
-} // re_detail
+} // BOOST_REGEX_DETAIL_NS
 } // boost
 #endif
 
index 8d69139f963e4c1222325209f4a39c6d6637dbaf..01efc3f3bef89181e0b8a7580eb412775275f1c6 100644 (file)
@@ -68,7 +68,7 @@ inline std::string to_string(const char* i, const char* j)
 }
 
 }
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 class RegExData
 {
@@ -141,12 +141,12 @@ void RegExData::clean()
 
 RegEx::RegEx()
 {
-   pdata = new re_detail::RegExData();
+   pdata = new BOOST_REGEX_DETAIL_NS::RegExData();
 }
 
 RegEx::RegEx(const RegEx& o)
 {
-   pdata = new re_detail::RegExData(*(o.pdata));
+   pdata = new BOOST_REGEX_DETAIL_NS::RegExData(*(o.pdata));
 }
 
 RegEx::~RegEx()
@@ -156,13 +156,13 @@ RegEx::~RegEx()
 
 RegEx::RegEx(const char* c, bool icase)
 {
-   pdata = new re_detail::RegExData();
+   pdata = new BOOST_REGEX_DETAIL_NS::RegExData();
    SetExpression(c, icase);
 }
 
 RegEx::RegEx(const std::string& s, bool icase)
 {
-   pdata = new re_detail::RegExData();
+   pdata = new BOOST_REGEX_DETAIL_NS::RegExData();
    SetExpression(s.c_str(), icase);
 }
 
@@ -200,7 +200,7 @@ std::string RegEx::Expression()const
 //
 bool RegEx::Match(const char* p, match_flag_type flags)
 {
-   pdata->t = re_detail::RegExData::type_pc;
+   pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pc;
    pdata->pbase = p;
    const char* end = p;
    while(*end)++end;
@@ -215,7 +215,7 @@ bool RegEx::Match(const char* p, match_flag_type flags)
 
 bool RegEx::Search(const char* p, match_flag_type flags)
 {
-   pdata->t = re_detail::RegExData::type_pc;
+   pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pc;
    pdata->pbase = p;
    const char* end = p;
    while(*end)++end;
@@ -227,7 +227,7 @@ bool RegEx::Search(const char* p, match_flag_type flags)
    }
    return false;
 }
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 struct pred1
 {
    GrepCallback cb;
@@ -242,17 +242,17 @@ struct pred1
 }
 unsigned int RegEx::Grep(GrepCallback cb, const char* p, match_flag_type flags)
 {
-   pdata->t = re_detail::RegExData::type_pc;
+   pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pc;
    pdata->pbase = p;
    const char* end = p;
    while(*end)++end;
 
-   unsigned int result = regex_grep(re_detail::pred1(cb, this), p, end, pdata->e, flags);
+   unsigned int result = regex_grep(BOOST_REGEX_DETAIL_NS::pred1(cb, this), p, end, pdata->e, flags);
    if(result)
       pdata->update();
    return result;
 }
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 struct pred2
 {
    std::vector<std::string>& v;
@@ -271,17 +271,17 @@ private:
 
 unsigned int RegEx::Grep(std::vector<std::string>& v, const char* p, match_flag_type flags)
 {
-   pdata->t = re_detail::RegExData::type_pc;
+   pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pc;
    pdata->pbase = p;
    const char* end = p;
    while(*end)++end;
 
-   unsigned int result = regex_grep(re_detail::pred2(v, this), p, end, pdata->e, flags);
+   unsigned int result = regex_grep(BOOST_REGEX_DETAIL_NS::pred2(v, this), p, end, pdata->e, flags);
    if(result)
       pdata->update();
    return result;
 }
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 struct pred3
 {
    std::vector<std::size_t>& v;
@@ -300,18 +300,18 @@ private:
 }
 unsigned int RegEx::Grep(std::vector<std::size_t>& v, const char* p, match_flag_type flags)
 {
-   pdata->t = re_detail::RegExData::type_pc;
+   pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pc;
    pdata->pbase = p;
    const char* end = p;
    while(*end)++end;
 
-   unsigned int result = regex_grep(re_detail::pred3(v, p, this), p, end, pdata->e, flags);
+   unsigned int result = regex_grep(BOOST_REGEX_DETAIL_NS::pred3(v, p, this), p, end, pdata->e, flags);
    if(result)
       pdata->update();
    return result;
 }
 #ifndef BOOST_REGEX_NO_FILEITER
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 struct pred4
 {
    GrepFileCallback cb;
@@ -338,17 +338,17 @@ void BuildFileList(std::list<std::string>* pl, const char* files, bool recurse)
    {
       // go through sub directories:
       char buf[MAX_PATH];
-      re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(buf, MAX_PATH, start.root()));
+      BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(buf, MAX_PATH, start.root()));
       if(*buf == 0)
       {
-         re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(buf, MAX_PATH, "."));
-         re_detail::overflow_error_if_not_zero(re_detail::strcat_s(buf, MAX_PATH, directory_iterator::separator()));
-         re_detail::overflow_error_if_not_zero(re_detail::strcat_s(buf, MAX_PATH, "*"));
+         BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(buf, MAX_PATH, "."));
+         BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcat_s(buf, MAX_PATH, directory_iterator::separator()));
+         BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcat_s(buf, MAX_PATH, "*"));
       }
       else
       {
-         re_detail::overflow_error_if_not_zero(re_detail::strcat_s(buf, MAX_PATH, directory_iterator::separator()));
-         re_detail::overflow_error_if_not_zero(re_detail::strcat_s(buf, MAX_PATH, "*"));
+         BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcat_s(buf, MAX_PATH, directory_iterator::separator()));
+         BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcat_s(buf, MAX_PATH, "*"));
       }
       directory_iterator dstart(buf);
       directory_iterator dend;
@@ -403,9 +403,9 @@ unsigned int RegEx::GrepFiles(GrepFileCallback cb, const char* files, bool recur
    while(start != end)
    {
       mapfile map((*start).c_str());
-      pdata->t = re_detail::RegExData::type_pf;
+      pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pf;
       pdata->fbase = map.begin();
-      re_detail::pred4 pred(cb, this, (*start).c_str());
+      BOOST_REGEX_DETAIL_NS::pred4 pred(cb, this, (*start).c_str());
       int r = regex_grep(pred, map.begin(), map.end(), pdata->e, flags);
       result += r;
       ++start;
@@ -430,7 +430,7 @@ unsigned int RegEx::FindFiles(FindFilesCallback cb, const char* files, bool recu
    while(start != end)
    {
       mapfile map((*start).c_str());
-      pdata->t = re_detail::RegExData::type_pf;
+      pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pf;
       pdata->fbase = map.begin();
 
       if(regex_search(map.begin(), map.end(), pdata->fm, pdata->e, flags))
@@ -456,7 +456,7 @@ std::string RegEx::Merge(const std::string& in, const std::string& fmt,
                     bool copy, match_flag_type flags)
 {
    std::string result;
-   re_detail::string_out_iterator<std::string> i(result);
+   BOOST_REGEX_DETAIL_NS::string_out_iterator<std::string> i(result);
    if(!copy) flags |= format_no_copy;
    regex_replace(i, in.begin(), in.end(), pdata->e, fmt.c_str(), flags);
    return result;
@@ -467,7 +467,7 @@ std::string RegEx::Merge(const char* in, const char* fmt,
 {
    std::string result;
    if(!copy) flags |= format_no_copy;
-   re_detail::string_out_iterator<std::string> i(result);
+   BOOST_REGEX_DETAIL_NS::string_out_iterator<std::string> i(result);
    regex_replace(i, in, in + std::strlen(in), pdata->e, fmt, flags);
    return result;
 }
@@ -489,13 +489,13 @@ std::size_t RegEx::Position(int i)const
 {
    switch(pdata->t)
    {
-   case re_detail::RegExData::type_pc:
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pc:
       return pdata->m[i].matched ? pdata->m[i].first - pdata->pbase : RegEx::npos;
 #ifndef BOOST_REGEX_NO_FILEITER
-   case re_detail::RegExData::type_pf:
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pf:
       return pdata->fm[i].matched ? pdata->fm[i].first - pdata->fbase : RegEx::npos;
 #endif
-   case re_detail::RegExData::type_copy:
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_copy:
       {
       std::map<int, std::ptrdiff_t, std::less<int> >::iterator pos = pdata->positions.find(i);
       if(pos == pdata->positions.end())
@@ -516,13 +516,13 @@ std::size_t RegEx::Length(int i)const
 {
    switch(pdata->t)
    {
-   case re_detail::RegExData::type_pc:
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pc:
       return pdata->m[i].matched ? pdata->m[i].second - pdata->m[i].first : RegEx::npos;
 #ifndef BOOST_REGEX_NO_FILEITER
-   case re_detail::RegExData::type_pf:
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pf:
       return pdata->fm[i].matched ? pdata->fm[i].second - pdata->fm[i].first : RegEx::npos;
 #endif
-   case re_detail::RegExData::type_copy:
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_copy:
       {
       std::map<int, std::string, std::less<int> >::iterator pos = pdata->strings.find(i);
       if(pos == pdata->strings.end())
@@ -537,13 +537,13 @@ bool RegEx::Matched(int i)const
 {
    switch(pdata->t)
    {
-   case re_detail::RegExData::type_pc:
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pc:
       return pdata->m[i].matched;
 #ifndef BOOST_REGEX_NO_FILEITER
-   case re_detail::RegExData::type_pf:
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pf:
       return pdata->fm[i].matched;
 #endif      
-   case re_detail::RegExData::type_copy:
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_copy:
       {
       std::map<int, std::string, std::less<int> >::iterator pos = pdata->strings.find(i);
       if(pos == pdata->strings.end())
@@ -560,15 +560,15 @@ std::string RegEx::What(int i)const
    std::string result;
    switch(pdata->t)
    {
-   case re_detail::RegExData::type_pc:
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pc:
       if(pdata->m[i].matched) 
          result.assign(pdata->m[i].first, pdata->m[i].second);
       break;
-   case re_detail::RegExData::type_pf:
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pf:
       if(pdata->m[i].matched) 
          result.assign(to_string(pdata->m[i].first, pdata->m[i].second));
       break;
-   case re_detail::RegExData::type_copy:
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_copy:
       {
       std::map<int, std::string, std::less<int> >::iterator pos = pdata->strings.find(i);
       if(pos != pdata->strings.end())
index 5f65127ff115ea0988a20aceeb22c0352eb01ffa..c48ed657c11de4ac51b04e17ad3140fc0ac00809 100644 (file)
@@ -58,7 +58,7 @@ namespace std{
 #endif
 
 namespace boost{
-   namespace re_detail{
+   namespace BOOST_REGEX_DETAIL_NS{
 // start with the operating system specific stuff:
 
 #if (defined(__BORLANDC__) || defined(BOOST_REGEX_FI_WIN32_DIR) || defined(BOOST_MSVC)) && !defined(BOOST_RE_NO_WIN32)
@@ -110,7 +110,7 @@ void mapfile::open(const char* file)
          hmap = 0;
          hfile = 0;
          std::runtime_error err("Unable to create file mapping.");
-         boost::re_detail::raise_runtime_error(err);
+         boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err);
       }
       _first = static_cast<const char*>(MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, 0));
       if(_first == 0)
@@ -397,9 +397,9 @@ inline void copy_find_file_result_with_overflow_check(const _fi_find_data& data,
 {
 #ifdef BOOST_NO_ANSI_APIS
    if (::WideCharToMultiByte(CP_ACP, 0,  data.cFileName, -1,  path, max_size,  NULL, NULL) == 0)
-      re_detail::overflow_error_if_not_zero(1);
+      BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(1);
 #else
-   re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(path, max_size,  data.cFileName));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(path, max_size,  data.cFileName));
 #endif
 }
 
@@ -454,22 +454,22 @@ file_iterator::file_iterator(const char* wild)
    BOOST_REGEX_NOEH_ASSERT(_root)
    _path = new char[MAX_PATH];
    BOOST_REGEX_NOEH_ASSERT(_path)
-   re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_root, MAX_PATH, wild));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_root, MAX_PATH, wild));
    ptr = _root;
    while(*ptr)++ptr;
    while((ptr > _root) && (*ptr != *_fi_sep) && (*ptr != *_fi_sep_alt))--ptr;
    if((ptr == _root) && ( (*ptr== *_fi_sep) || (*ptr==*_fi_sep_alt) ) )
    {
      _root[1]='\0';
-     re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, _root));
+     BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, _root));
    }
    else
    {
      *ptr = 0;
-     re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, _root));
+     BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, _root));
      if(*_path == 0)
-       re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, "."));
-     re_detail::overflow_error_if_not_zero(re_detail::strcat_s(_path, MAX_PATH, _fi_sep));
+       BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, "."));
+     BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcat_s(_path, MAX_PATH, _fi_sep));
    }
    ptr = _path + std::strlen(_path);
 
@@ -512,8 +512,8 @@ file_iterator::file_iterator(const file_iterator& other)
    BOOST_REGEX_NOEH_ASSERT(_root)
    _path = new char[MAX_PATH];
    BOOST_REGEX_NOEH_ASSERT(_path)
-   re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_root, MAX_PATH, other._root));
-   re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, other._path));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_root, MAX_PATH, other._root));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, other._path));
    ptr = _path + (other.ptr - other._path);
    ref = other.ref;
 #ifndef BOOST_NO_EXCEPTIONS
@@ -530,8 +530,8 @@ file_iterator::file_iterator(const file_iterator& other)
 
 file_iterator& file_iterator::operator=(const file_iterator& other)
 {
-   re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_root, MAX_PATH, other._root));
-   re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, other._path));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_root, MAX_PATH, other._root));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, other._path));
    ptr = _path + (other.ptr - other._path);
    if(--(ref->count) == 0)
    {
@@ -632,7 +632,7 @@ directory_iterator::directory_iterator(const char* wild)
    BOOST_REGEX_NOEH_ASSERT(_root)
    _path = new char[MAX_PATH];
    BOOST_REGEX_NOEH_ASSERT(_path)
-   re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_root, MAX_PATH, wild));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_root, MAX_PATH, wild));
    ptr = _root;
    while(*ptr)++ptr;
    while((ptr > _root) && (*ptr != *_fi_sep) && (*ptr != *_fi_sep_alt))--ptr;
@@ -640,15 +640,15 @@ directory_iterator::directory_iterator(const char* wild)
    if((ptr == _root) && ( (*ptr== *_fi_sep) || (*ptr==*_fi_sep_alt) ) )
    {
      _root[1]='\0';
-     re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, _root));
+     BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, _root));
    }
    else
    {
      *ptr = 0;
-     re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, _root));
+     BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, _root));
      if(*_path == 0)
-       re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, "."));
-     re_detail::overflow_error_if_not_zero(re_detail::strcat_s(_path, MAX_PATH, _fi_sep));
+       BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, "."));
+     BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcat_s(_path, MAX_PATH, _fi_sep));
    }
    ptr = _path + std::strlen(_path);
 
@@ -702,8 +702,8 @@ directory_iterator::directory_iterator(const directory_iterator& other)
    BOOST_REGEX_NOEH_ASSERT(_root)
    _path = new char[MAX_PATH];
    BOOST_REGEX_NOEH_ASSERT(_path)
-   re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_root, MAX_PATH, other._root));
-   re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, other._path));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_root, MAX_PATH, other._root));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, other._path));
    ptr = _path + (other.ptr - other._path);
    ref = other.ref;
 #ifndef BOOST_NO_EXCEPTIONS
@@ -720,8 +720,8 @@ directory_iterator::directory_iterator(const directory_iterator& other)
 
 directory_iterator& directory_iterator::operator=(const directory_iterator& other)
 {
-   re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_root, MAX_PATH, other._root));
-   re_detail::overflow_error_if_not_zero(re_detail::strcpy_s(_path, MAX_PATH, other._path));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_root, MAX_PATH, other._root));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, other._path));
    ptr = _path + (other.ptr - other._path);
    if(--(ref->count) == 0)
    {
@@ -910,7 +910,7 @@ bool _fi_FindClose(_fi_find_handle dat)
 
 #endif
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 } // namspace boost
 
 #endif    // BOOST_REGEX_NO_FILEITER
index 2fa2b3b17e51dd29d7a2c0800010a1ddef48d6d9..5d166a69744f041d7cb39e943f0eb1ea9f6e7a5e 100644 (file)
@@ -28,7 +28,7 @@
 
 namespace boost{
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 icu_regex_traits_implementation::string_type icu_regex_traits_implementation::do_transform(const char_type* p1, const char_type* p2, const U_NAMESPACE_QUALIFIER Collator* pcoll) const
 {
@@ -191,7 +191,7 @@ icu_regex_traits::char_class_type icu_regex_traits::lookup_icu_mask(const ::UCha
       /* zs */  'z', 's', 
    };
 
-   static const re_detail::character_pointer_range< ::UChar32> range_data[] = {
+   static const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32> range_data[] = {
       { prop_name_table+0, prop_name_table+3, }, // any
       { prop_name_table+3, prop_name_table+8, }, // ascii
       { prop_name_table+8, prop_name_table+16, }, // assigned
@@ -354,11 +354,11 @@ icu_regex_traits::char_class_type icu_regex_traits::lookup_icu_mask(const ::UCha
    };
 
 
-   static const re_detail::character_pointer_range< ::UChar32>* ranges_begin = range_data;
-   static const re_detail::character_pointer_range< ::UChar32>* ranges_end = range_data + (sizeof(range_data)/sizeof(range_data[0]));
+   static const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* ranges_begin = range_data;
+   static const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* ranges_end = range_data + (sizeof(range_data)/sizeof(range_data[0]));
    
-   re_detail::character_pointer_range< ::UChar32> t = { p1, p2, };
-   const re_detail::character_pointer_range< ::UChar32>* p = std::lower_bound(ranges_begin, ranges_end, t);
+   BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32> t = { p1, p2, };
+   const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* p = std::lower_bound(ranges_begin, ranges_end, t);
    if((p != ranges_end) && (t == *p))
       return icu_class_map[p - ranges_begin];
    return 0;
@@ -392,7 +392,7 @@ icu_regex_traits::char_class_type icu_regex_traits::lookup_classname(const char_
       char_class_type(U_GC_ND_MASK) | mask_xdigit,
    };
 
-   int idx = ::boost::re_detail::get_default_class_id(p1, p2);
+   int idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2);
    if(idx >= 0)
       return masks[idx+1];
    char_class_type result = lookup_icu_mask(p1, p2);
@@ -415,7 +415,7 @@ icu_regex_traits::char_class_type icu_regex_traits::lookup_classname(const char_
          }
       }
       if(s.size())
-         idx = ::boost::re_detail::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
+         idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
       if(idx >= 0)
          return masks[idx+1];
       if(s.size())
@@ -457,7 +457,7 @@ icu_regex_traits::string_type icu_regex_traits::lookup_collatename(const char_ty
          return result;
       }
       // try POSIX name:
-      s = ::boost::re_detail::lookup_default_collate_name(s);
+      s = ::boost::BOOST_REGEX_DETAIL_NS::lookup_default_collate_name(s);
 #ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
       result.assign(s.begin(), s.end());
 #else
@@ -495,9 +495,9 @@ bool icu_regex_traits::isctype(char_type c, char_class_type f) const
       return true;
    if(((f & mask_ascii) != 0) && (c <= 0x7F))
       return true;
-   if(((f & mask_vertical) != 0) && (::boost::re_detail::is_separator(c) || (c == static_cast<char_type>('\v')) || (m == U_GC_ZL_MASK) || (m == U_GC_ZP_MASK)))
+   if(((f & mask_vertical) != 0) && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == static_cast<char_type>('\v')) || (m == U_GC_ZL_MASK) || (m == U_GC_ZP_MASK)))
       return true;
-   if(((f & mask_horizontal) != 0) && !::boost::re_detail::is_separator(c) && u_isspace(c) && (c != static_cast<char_type>('\v')))
+   if(((f & mask_horizontal) != 0) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) && u_isspace(c) && (c != static_cast<char_type>('\v')))
       return true;
    return false;
 }
index 8a803b3c0f45cb0f9e310ecfcee0e45442551df7..3711a9a09c4902bbc0fcb44b3da34a90720fa0c6 100644 (file)
@@ -68,23 +68,20 @@ typedef boost::basic_regex<char, c_regex_traits<char> > c_regex_type;
 
 BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompA(regex_tA* expression, const char* ptr, int f)
 {
-   if(expression->re_magic != magic_value)
-   {
-      expression->guts = 0;
 #ifndef BOOST_NO_EXCEPTIONS
-      try{
+   try{
 #endif
       expression->guts = new c_regex_type();
 #ifndef BOOST_NO_EXCEPTIONS
-      } catch(...)
-      {
-         return REG_ESPACE;
-      }
+   } catch(...)
+   {
+      expression->guts = 0;
+      return REG_ESPACE;
+   }
 #else
-      if(0 == expression->guts)
-         return REG_E_MEMORY;
+   if(0 == expression->guts)
+      return REG_E_MEMORY;
 #endif
-   }
    // set default flags:
    boost::uint_fast32_t flags = (f & REG_PERLEX) ? 0 : ((f & REG_EXTENDED) ? regex::extended : regex::basic);
    expression->eflags = (f & REG_NEWLINE) ? match_not_dot_newline : match_default;
@@ -154,7 +151,7 @@ BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorA(int code, const regex_tA*
       {
          result = std::strlen(names[code]) + 1;
          if(buf_size >= result)
-            re_detail::strcpy_s(buf, buf_size, names[code]);
+            BOOST_REGEX_DETAIL_NS::strcpy_s(buf, buf_size, names[code]);
          return result;
       }
       return result;
@@ -180,7 +177,7 @@ BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorA(int code, const regex_tA*
             if(r < 0)
                return 0; // sprintf failed
             if(std::strlen(localbuf) < buf_size)
-               re_detail::strcpy_s(buf, buf_size, localbuf);
+               BOOST_REGEX_DETAIL_NS::strcpy_s(buf, buf_size, localbuf);
             return std::strlen(localbuf) + 1;
          }
       }
@@ -190,7 +187,7 @@ BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorA(int code, const regex_tA*
       (std::sprintf)(localbuf, "%d", 0);
 #endif
       if(std::strlen(localbuf) < buf_size)
-         re_detail::strcpy_s(buf, buf_size, localbuf);
+         BOOST_REGEX_DETAIL_NS::strcpy_s(buf, buf_size, localbuf);
       return std::strlen(localbuf) + 1;
    }
    if(code <= (int)REG_E_UNKNOWN)
@@ -200,12 +197,12 @@ BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorA(int code, const regex_tA*
          p = static_cast<c_regex_type*>(e->guts)->get_traits().error_string(static_cast< ::boost::regex_constants::error_type>(code));
       else
       {
-         p = re_detail::get_default_error_string(static_cast< ::boost::regex_constants::error_type>(code));
+         p = BOOST_REGEX_DETAIL_NS::get_default_error_string(static_cast< ::boost::regex_constants::error_type>(code));
       }
       std::size_t len = p.size();
       if(len < buf_size)
       {
-         re_detail::strcpy_s(buf, buf_size, p.c_str());
+         BOOST_REGEX_DETAIL_NS::strcpy_s(buf, buf_size, p.c_str());
       }
       return len + 1;
    }
index ea20a06b546e0add4017ede6e37e498f241214b6..03057aac9c56e152b5db26303f717b921784de1c 100644 (file)
@@ -64,7 +64,7 @@ regex_error::regex_error(const std::string& s, regex_constants::error_type err,
 }
 
 regex_error::regex_error(regex_constants::error_type err) 
-   : std::runtime_error(::boost::re_detail::get_default_error_string(err))
+   : std::runtime_error(::boost::BOOST_REGEX_DETAIL_NS::get_default_error_string(err))
    , m_error_code(err)
    , m_position(0) 
 {
@@ -83,7 +83,7 @@ void regex_error::raise()const
 
 
 
-namespace re_detail{
+namespace BOOST_REGEX_DETAIL_NS{
 
 BOOST_REGEX_DECL void BOOST_REGEX_CALL raise_runtime_error(const std::runtime_error& ex)
 {
@@ -211,7 +211,7 @@ BOOST_REGEX_DECL void BOOST_REGEX_CALL put_mem_block(void* p)
 
 #endif
 
-} // namespace re_detail
+} // namespace BOOST_REGEX_DETAIL_NS
 
 
 
index f75f0a516e17059e5d65c57eebd6b2f43d06e6fc..bb492297746d94ad0b2ff0bf7714c4347c5c3362 100644 (file)
@@ -32,19 +32,19 @@ namespace std{
 #endif
 
 
-namespace boost{ namespace re_detail{
+namespace boost{ namespace BOOST_REGEX_DETAIL_NS{
 
 void BOOST_REGEX_CALL raw_storage::resize(size_type n)
 {
-   register size_type newsize = start ? last - start : 1024;
+   size_type newsize = start ? last - start : 1024;
    while(newsize < n)
       newsize *= 2;
-   register size_type datasize = end - start;
+   size_type datasize = end - start;
    // extend newsize to WORD/DWORD boundary:
    newsize = (newsize + padding_mask) & ~(padding_mask);
 
    // allocate and copy data:
-   register pointer ptr = static_cast<pointer>(::operator new(newsize));
+   pointer ptr = static_cast<pointer>(::operator new(newsize));
    BOOST_REGEX_NOEH_ASSERT(ptr)
    if(start)
       std::memcpy(ptr, start, datasize);
@@ -63,7 +63,7 @@ void* BOOST_REGEX_CALL raw_storage::insert(size_type pos, size_type n)
    BOOST_ASSERT(pos <= size_type(end - start));
    if(size_type(last - end) < n)
       resize(n + (end - start));
-   register void* result = start + pos;
+   void* result = start + pos;
    std::memmove(start + pos + n, start + pos, (end - start) - pos);
    end += n;
    return result;
index 5f06149c3efbf6f45b3c4f6143bbd8222c428926..0b66c68dc70696fb896265d3d923b4075b4f3d3b 100644 (file)
@@ -36,7 +36,7 @@ namespace std{
 #endif
 
 
-namespace boost{ namespace re_detail{
+namespace boost{ namespace BOOST_REGEX_DETAIL_NS{
 
 BOOST_REGEX_DECL const char* BOOST_REGEX_CALL get_default_syntax(regex_constants::syntax_type n)
 {
@@ -688,5 +688,5 @@ BOOST_REGEX_DECL regex_constants::syntax_type BOOST_REGEX_CALL get_default_synta
 }
 
 
-} // re_detail
+} // BOOST_REGEX_DETAIL_NS
 } // boost
index cf4dc10fd18d6bed2030b2dd2eae06c1ed700b1d..0f825702477ff981e5e16cf1fa4b38a16486faef 100644 (file)
@@ -19,7 +19,7 @@
 #define BOOST_REGEX_SOURCE
 #include <boost/regex/config.hpp>
 
-#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32)
+#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32) && !defined(BOOST_REGEX_NO_WIN32_LOCALE)
 #include <boost/regex/regex_traits.hpp>
 #include <boost/regex/pattern_except.hpp>
 
@@ -40,7 +40,7 @@ namespace std{
 }
 #endif
 
-namespace boost{ namespace re_detail{
+namespace boost{ namespace BOOST_REGEX_DETAIL_NS{
 
 #ifdef BOOST_NO_ANSI_APIS
 UINT get_code_page_for_locale_id(lcid_type idx)
@@ -63,12 +63,12 @@ void w32_regex_traits_char_layer<char>::init()
    std::string cat_name(w32_regex_traits<char>::get_catalog_name());
    if(cat_name.size())
    {
-      cat = ::boost::re_detail::w32_cat_open(cat_name);
+      cat = ::boost::BOOST_REGEX_DETAIL_NS::w32_cat_open(cat_name);
       if(!cat)
       {
          std::string m("Unable to open message catalog: ");
          std::runtime_error err(m + cat_name);
-         ::boost::re_detail::raise_runtime_error(err);
+         ::boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err);
       }
    }
    //
@@ -78,7 +78,7 @@ void w32_regex_traits_char_layer<char>::init()
    {
       for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i)
       {
-         string_type mss = ::boost::re_detail::w32_cat_get(cat, this->m_locale, i, get_default_syntax(i));
+         string_type mss = ::boost::BOOST_REGEX_DETAIL_NS::w32_cat_get(cat, this->m_locale, i, get_default_syntax(i));
          for(string_type::size_type j = 0; j < mss.size(); ++j)
          {
             m_char_map[static_cast<unsigned char>(mss[j])] = i;
@@ -105,9 +105,9 @@ void w32_regex_traits_char_layer<char>::init()
    {
       if(m_char_map[i] == 0)
       {
-         if(::boost::re_detail::w32_is(this->m_locale, 0x0002u, (char)i)) 
+         if(::boost::BOOST_REGEX_DETAIL_NS::w32_is(this->m_locale, 0x0002u, (char)i)) 
             m_char_map[i] = regex_constants::escape_type_class;
-         else if(::boost::re_detail::w32_is(this->m_locale, 0x0001u, (char)i)) 
+         else if(::boost::BOOST_REGEX_DETAIL_NS::w32_is(this->m_locale, 0x0001u, (char)i)) 
             m_char_map[i] = regex_constants::escape_type_not_class;
       }
    }while(0xFF != i++);
@@ -645,7 +645,7 @@ BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type idx, boost::uint32_t m,
 #endif
 #endif
 
-} // re_detail
+} // BOOST_REGEX_DETAIL_NS
 } // boost
 
 #endif
index 7815a09b3a9af844adea8e74f8aefbfd78f89f9d..e7fcfb8ea87770166e420e68fc6b84fdaf0e5639 100644 (file)
@@ -117,7 +117,7 @@ c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::t
 c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::transform_primary(const wchar_t* p1, const wchar_t* p2) 
 {
    static wchar_t s_delim;
-   static const int s_collate_type = ::boost::re_detail::find_sort_syntax(static_cast<const c_regex_traits<wchar_t>*>(0), &s_delim);
+   static const int s_collate_type = ::boost::BOOST_REGEX_DETAIL_NS::find_sort_syntax(static_cast<const c_regex_traits<wchar_t>*>(0), &s_delim);
    std::wstring result;
    //
    // What we do here depends upon the format of the sort key returned by
@@ -125,8 +125,8 @@ c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::t
    //
    switch(s_collate_type)
    {
-   case ::boost::re_detail::sort_C:
-   case ::boost::re_detail::sort_unknown:
+   case ::boost::BOOST_REGEX_DETAIL_NS::sort_C:
+   case ::boost::BOOST_REGEX_DETAIL_NS::sort_unknown:
       // the best we can do is translate to lower case, then get a regular sort key:
       {
          result.assign(p1, p2);
@@ -135,14 +135,14 @@ c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::t
          result = c_regex_traits<wchar_t>::transform(&*result.begin(), &*result.begin() + result.size());
          break;
       }
-   case ::boost::re_detail::sort_fixed:
+   case ::boost::BOOST_REGEX_DETAIL_NS::sort_fixed:
       {
          // get a regular sort key, and then truncate it:
          result = c_regex_traits<wchar_t>::transform(&*result.begin(), &*result.begin() + result.size());
          result.erase(s_delim);
          break;
       }
-   case ::boost::re_detail::sort_delim:
+   case ::boost::BOOST_REGEX_DETAIL_NS::sort_delim:
          // get a regular sort key, and then truncate everything after the delim:
          result = c_regex_traits<wchar_t>::transform(&*result.begin(), &*result.begin() + result.size());
          if(result.size() && (result[0] == s_delim))
@@ -189,13 +189,13 @@ c_regex_traits<wchar_t>::char_class_type BOOST_REGEX_CALL c_regex_traits<wchar_t
       char_class_xdigit,
    };
 
-   int idx = ::boost::re_detail::get_default_class_id(p1, p2);
+   int idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2);
    if(idx < 0)
    {
       std::wstring s(p1, p2);
       for(std::wstring::size_type i = 0; i < s.size(); ++i)
          s[i] = (std::towlower)(s[i]);
-      idx = ::boost::re_detail::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
+      idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
    }
    BOOST_ASSERT(idx+1 < static_cast<int>(sizeof(masks) / sizeof(masks[0])));
    return masks[idx+1];
@@ -213,11 +213,11 @@ bool BOOST_REGEX_CALL c_regex_traits<wchar_t>::isctype(wchar_t c, char_class_typ
       || ((mask & char_class_digit) && (std::iswdigit)(c))
       || ((mask & char_class_punct) && (std::iswpunct)(c))
       || ((mask & char_class_xdigit) && (std::iswxdigit)(c))
-      || ((mask & char_class_blank) && (std::iswspace)(c) && !::boost::re_detail::is_separator(c))
+      || ((mask & char_class_blank) && (std::iswspace)(c) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c))
       || ((mask & char_class_word) && (c == '_'))
       || ((mask & char_class_unicode) && (c & ~static_cast<wchar_t>(0xff)))
-      || ((mask & char_class_vertical) && (::boost::re_detail::is_separator(c) || (c == L'\v')))
-      || ((mask & char_class_horizontal) && (std::iswspace)(c) && !::boost::re_detail::is_separator(c) && (c != L'\v'));
+      || ((mask & char_class_vertical) && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == L'\v')))
+      || ((mask & char_class_horizontal) && (std::iswspace)(c) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) && (c != L'\v'));
 }
 
 c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::lookup_collatename(const wchar_t* p1, const wchar_t* p2) 
@@ -232,7 +232,7 @@ c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::l
    while(p0 != p2)
       name.append(1, char(*p0++));
 #endif
-   name = ::boost::re_detail::lookup_default_collate_name(name);
+   name = ::boost::BOOST_REGEX_DETAIL_NS::lookup_default_collate_name(name);
 #if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
                && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\
                && !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
index 41704cd0a74af64586d42857fc53402e054190be..bc1c0af2ae8e2743adb0f8bc565b08ab51b18c90 100644 (file)
@@ -78,23 +78,20 @@ typedef boost::basic_regex<wchar_t, c_regex_traits<wchar_t> > wc_regex_type;
 
 BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompW(regex_tW* expression, const wchar_t* ptr, int f)
 {
-   if(expression->re_magic != wmagic_value)
-   {
-      expression->guts = 0;
 #ifndef BOOST_NO_EXCEPTIONS
-      try{
+   try{
 #endif
       expression->guts = new wc_regex_type();
 #ifndef BOOST_NO_EXCEPTIONS
-      } catch(...)
-      {
-         return REG_ESPACE;
-      }
+   } catch(...)
+   {
+      expression->guts = 0;
+      return REG_ESPACE;
+   }
 #else
-      if(0 == expression->guts)
-         return REG_E_MEMORY;
+   if(0 == expression->guts)
+      return REG_E_MEMORY;
 #endif
-   }
    // set default flags:
    boost::uint_fast32_t flags = (f & REG_PERLEX) ? 0 : ((f & REG_EXTENDED) ? wregex::extended : wregex::basic);
    expression->eflags = (f & REG_NEWLINE) ? match_not_dot_newline : match_default;
@@ -218,12 +215,12 @@ BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorW(int code, const regex_tW*
          p = static_cast<wc_regex_type*>(e->guts)->get_traits().error_string(static_cast< ::boost::regex_constants::error_type>(code));
       else
       {
-         p = re_detail::get_default_error_string(static_cast< ::boost::regex_constants::error_type>(code));
+         p = BOOST_REGEX_DETAIL_NS::get_default_error_string(static_cast< ::boost::regex_constants::error_type>(code));
       }
       std::size_t len = p.size();
       if(len < buf_size)
       {
-         re_detail::copy(p.c_str(), p.c_str() + p.size() + 1, buf);
+         BOOST_REGEX_DETAIL_NS::copy(p.c_str(), p.c_str() + p.size() + 1, buf);
       }
       return len + 1;
    }