summaryrefslogtreecommitdiff
path: root/boost
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2016-10-06 10:33:54 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2016-10-06 10:36:09 +0900
commitd9ec475d945d3035377a0d89ed42e382d8988891 (patch)
tree34aff2cee4b209906243ab5499d61f3edee2982f /boost
parent71d216b90256936a9638f325af9bc69d720e75de (diff)
downloadboost-d9ec475d945d3035377a0d89ed42e382d8988891.tar.gz
boost-d9ec475d945d3035377a0d89ed42e382d8988891.tar.bz2
boost-d9ec475d945d3035377a0d89ed42e382d8988891.zip
Imported Upstream version 1.60.0
Change-Id: Ie709530d6d5841088ceaba025cbe175a4ef43050 Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'boost')
-rw-r--r--boost/align.hpp2
-rw-r--r--boost/align/align.hpp2
-rw-r--r--boost/align/aligned_alloc.hpp2
-rw-r--r--boost/align/aligned_allocator.hpp24
-rw-r--r--boost/align/aligned_allocator_adaptor.hpp12
-rw-r--r--boost/align/aligned_allocator_adaptor_forward.hpp6
-rw-r--r--boost/align/aligned_allocator_forward.hpp6
-rw-r--r--boost/align/aligned_delete.hpp8
-rw-r--r--boost/align/aligned_delete_forward.hpp6
-rw-r--r--boost/align/alignment_of.hpp6
-rw-r--r--boost/align/alignment_of_forward.hpp6
-rw-r--r--boost/align/assume_aligned.hpp4
-rw-r--r--boost/align/detail/address.hpp12
-rw-r--r--boost/align/detail/addressof.hpp8
-rw-r--r--boost/align/detail/align.hpp8
-rw-r--r--boost/align/detail/align_cxx11.hpp6
-rw-r--r--boost/align/detail/aligned_alloc.hpp6
-rw-r--r--boost/align/detail/aligned_alloc_android.hpp6
-rw-r--r--boost/align/detail/aligned_alloc_macos.hpp8
-rw-r--r--boost/align/detail/aligned_alloc_msvc.hpp6
-rw-r--r--boost/align/detail/aligned_alloc_posix.hpp6
-rw-r--r--boost/align/detail/aligned_alloc_sunos.hpp6
-rw-r--r--boost/align/detail/alignment_of.hpp19
-rw-r--r--boost/align/detail/alignment_of_clang.hpp8
-rw-r--r--boost/align/detail/alignment_of_codegear.hpp8
-rw-r--r--boost/align/detail/alignment_of_cxx11.hpp8
-rw-r--r--boost/align/detail/alignment_of_gcc.hpp8
-rw-r--r--boost/align/detail/alignment_of_msvc.hpp21
-rw-r--r--boost/align/detail/assume_aligned.hpp2
-rw-r--r--boost/align/detail/assume_aligned_clang.hpp8
-rw-r--r--boost/align/detail/assume_aligned_gcc.hpp2
-rw-r--r--boost/align/detail/assume_aligned_intel.hpp2
-rw-r--r--boost/align/detail/assume_aligned_msvc.hpp2
-rw-r--r--boost/align/detail/integral_constant.hpp22
-rw-r--r--boost/align/detail/is_aligned.hpp8
-rw-r--r--boost/align/detail/is_alignment.hpp8
-rw-r--r--boost/align/detail/is_alignment_constant.hpp8
-rw-r--r--boost/align/detail/max_align.hpp17
-rw-r--r--boost/align/detail/max_objects.hpp (renamed from boost/align/detail/max_count_of.hpp)14
-rw-r--r--boost/align/detail/max_size.hpp28
-rw-r--r--boost/align/detail/min_size.hpp8
-rw-r--r--boost/align/detail/offset_object.hpp26
-rw-r--r--boost/align/detail/remove_traits.hpp8
-rw-r--r--boost/align/is_aligned.hpp2
-rw-r--r--boost/aligned_storage.hpp127
-rw-r--r--boost/archive/archive_exception.hpp1
-rw-r--r--boost/archive/basic_binary_oprimitive.hpp8
-rw-r--r--boost/archive/detail/basic_iarchive.hpp6
-rw-r--r--boost/archive/detail/basic_iserializer.hpp6
-rw-r--r--boost/archive/detail/basic_oarchive.hpp10
-rw-r--r--boost/archive/detail/basic_oserializer.hpp6
-rw-r--r--boost/archive/detail/basic_pointer_iserializer.hpp6
-rw-r--r--boost/archive/detail/basic_pointer_oserializer.hpp6
-rw-r--r--boost/archive/detail/interface_oarchive.hpp4
-rw-r--r--boost/archive/detail/iserializer.hpp41
-rw-r--r--boost/archive/detail/polymorphic_iarchive_route.hpp4
-rw-r--r--boost/archive/detail/polymorphic_oarchive_route.hpp4
-rw-r--r--boost/archive/impl/xml_iarchive_impl.ipp52
-rw-r--r--boost/archive/iterators/head_iterator.hpp80
-rw-r--r--boost/archive/iterators/mb_from_wchar.hpp14
-rw-r--r--boost/archive/iterators/wchar_from_mb.hpp32
-rw-r--r--boost/archive/polymorphic_iarchive.hpp4
-rw-r--r--boost/archive/polymorphic_oarchive.hpp4
-rw-r--r--boost/archive/xml_archive_exception.hpp2
-rw-r--r--boost/asio/basic_serial_port.hpp2
-rw-r--r--boost/asio/detail/config.hpp39
-rw-r--r--boost/asio/detail/handler_type_requirements.hpp14
-rw-r--r--boost/asio/detail/impl/socket_ops.ipp12
-rw-r--r--boost/asio/detail/impl/win_event.ipp12
-rw-r--r--boost/asio/detail/impl/win_iocp_handle_service.ipp2
-rw-r--r--boost/asio/detail/impl/win_mutex.ipp5
-rw-r--r--boost/asio/detail/impl/win_static_mutex.ipp18
-rw-r--r--boost/asio/detail/impl/win_thread.ipp12
-rw-r--r--boost/asio/detail/local_free_on_block_exit.hpp2
-rw-r--r--boost/asio/detail/socket_types.hpp8
-rw-r--r--boost/asio/detail/thread.hpp8
-rw-r--r--boost/asio/detail/win_event.hpp4
-rw-r--r--boost/asio/detail/win_thread.hpp8
-rw-r--r--boost/asio/detail/winapi_thread.hpp124
-rw-r--r--boost/asio/ssl/impl/context.ipp16
-rw-r--r--boost/asio/ssl/old/detail/openssl_context_service.hpp8
-rw-r--r--boost/asio/version.hpp2
-rw-r--r--boost/assert.hpp9
-rw-r--r--boost/atomic/detail/atomic_flag.hpp6
-rw-r--r--boost/atomic/detail/atomic_template.hpp128
-rw-r--r--boost/atomic/detail/bitwise_cast.hpp (renamed from boost/atomic/detail/casts.hpp)31
-rw-r--r--boost/atomic/detail/caps_gcc_ppc.hpp2
-rw-r--r--boost/atomic/detail/config.hpp36
-rw-r--r--boost/atomic/detail/int_sizes.hpp4
-rw-r--r--boost/atomic/detail/operations_fwd.hpp3
-rw-r--r--boost/atomic/detail/ops_cas_based.hpp40
-rw-r--r--boost/atomic/detail/ops_emulated.hpp16
-rw-r--r--boost/atomic/detail/ops_extending_cas_based.hpp9
-rw-r--r--boost/atomic/detail/ops_gcc_alpha.hpp2
-rw-r--r--boost/atomic/detail/ops_gcc_arm.hpp2
-rw-r--r--boost/atomic/detail/ops_gcc_atomic.hpp15
-rw-r--r--boost/atomic/detail/ops_gcc_ppc.hpp379
-rw-r--r--boost/atomic/detail/ops_gcc_sparc.hpp27
-rw-r--r--boost/atomic/detail/ops_gcc_sync.hpp33
-rw-r--r--boost/atomic/detail/ops_gcc_x86.hpp4
-rw-r--r--boost/atomic/detail/ops_gcc_x86_dcas.hpp306
-rw-r--r--boost/atomic/detail/ops_linux_arm.hpp7
-rw-r--r--boost/atomic/detail/ops_msvc_arm.hpp4
-rw-r--r--boost/atomic/detail/ops_msvc_x86.hpp57
-rw-r--r--boost/atomic/detail/ops_windows.hpp1
-rw-r--r--boost/atomic/detail/platform.hpp8
-rw-r--r--boost/atomic/detail/storage_type.hpp138
-rw-r--r--boost/bind.hpp19
-rw-r--r--boost/bind/arg.hpp6
-rw-r--r--boost/bind/bind.hpp483
-rw-r--r--boost/bind/placeholders.hpp65
-rw-r--r--boost/chrono/detail/inlined/mac/chrono.hpp54
-rw-r--r--boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp2
-rw-r--r--boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp2
-rw-r--r--boost/chrono/duration.hpp3
-rw-r--r--boost/chrono/io/time_point_units.hpp15
-rw-r--r--boost/concept_check.hpp17
-rw-r--r--boost/config/compiler/clang.hpp22
-rw-r--r--boost/config/compiler/gcc.hpp20
-rw-r--r--boost/config/compiler/intel.hpp6
-rw-r--r--boost/config/compiler/sunpro_cc.hpp10
-rw-r--r--boost/config/compiler/visualc.hpp1
-rw-r--r--boost/config/platform/cloudabi.hpp18
-rw-r--r--boost/config/platform/macos.hpp2
-rw-r--r--boost/config/platform/win32.hpp8
-rw-r--r--boost/config/select_platform_config.hpp4
-rw-r--r--boost/config/stdlib/dinkumware.hpp11
-rw-r--r--boost/config/stdlib/libstdcpp3.hpp4
-rw-r--r--boost/config/suffix.hpp20
-rw-r--r--boost/container/adaptive_pool.hpp34
-rw-r--r--boost/container/allocator.hpp43
-rw-r--r--boost/container/allocator_traits.hpp2
-rw-r--r--boost/container/container_fwd.hpp40
-rw-r--r--boost/container/deque.hpp91
-rw-r--r--boost/container/detail/adaptive_node_pool.hpp1
-rw-r--r--boost/container/detail/alloc_lib.h122
-rw-r--r--boost/container/detail/alloc_lib_auto_link.hpp24
-rw-r--r--boost/container/detail/auto_link.hpp11
-rw-r--r--boost/container/detail/block_list.hpp139
-rw-r--r--boost/container/detail/block_slist.hpp157
-rw-r--r--boost/container/detail/config_begin.hpp1
-rw-r--r--boost/container/detail/copy_move_algo.hpp8
-rw-r--r--boost/container/detail/dispatch_uses_allocator.hpp293
-rw-r--r--boost/container/detail/dlmalloc.hpp103
-rw-r--r--boost/container/detail/flat_tree.hpp30
-rw-r--r--boost/container/detail/mutex.hpp4
-rw-r--r--boost/container/detail/pair.hpp72
-rw-r--r--boost/container/detail/pool_common_alloc.hpp12
-rw-r--r--boost/container/detail/pool_resource.hpp191
-rw-r--r--boost/container/detail/std_fwd.hpp30
-rw-r--r--boost/container/detail/tree.hpp37
-rw-r--r--boost/container/detail/type_traits.hpp2
-rw-r--r--boost/container/detail/variadic_templates_tools.hpp2
-rw-r--r--boost/container/detail/workaround.hpp21
-rw-r--r--boost/container/flat_map.hpp21
-rw-r--r--boost/container/flat_set.hpp6
-rw-r--r--boost/container/list.hpp111
-rw-r--r--boost/container/map.hpp6
-rw-r--r--boost/container/new_allocator.hpp4
-rw-r--r--boost/container/node_allocator.hpp24
-rw-r--r--boost/container/pmr/deque.hpp43
-rw-r--r--boost/container/pmr/flat_map.hpp63
-rw-r--r--boost/container/pmr/flat_set.hpp59
-rw-r--r--boost/container/pmr/global_resource.hpp66
-rw-r--r--boost/container/pmr/list.hpp43
-rw-r--r--boost/container/pmr/map.hpp63
-rw-r--r--boost/container/pmr/memory_resource.hpp101
-rw-r--r--boost/container/pmr/monotonic_buffer_resource.hpp180
-rw-r--r--boost/container/pmr/polymorphic_allocator.hpp166
-rw-r--r--boost/container/pmr/pool_options.hpp52
-rw-r--r--boost/container/pmr/resource_adaptor.hpp193
-rw-r--r--boost/container/pmr/set.hpp59
-rw-r--r--boost/container/pmr/slist.hpp43
-rw-r--r--boost/container/pmr/small_vector.hpp43
-rw-r--r--boost/container/pmr/stable_vector.hpp43
-rw-r--r--boost/container/pmr/string.hpp48
-rw-r--r--boost/container/pmr/synchronized_pool_resource.hpp138
-rw-r--r--boost/container/pmr/unsynchronized_pool_resource.hpp194
-rw-r--r--boost/container/pmr/vector.hpp43
-rw-r--r--boost/container/scoped_allocator.hpp452
-rw-r--r--boost/container/scoped_allocator_fwd.hpp31
-rw-r--r--boost/container/set.hpp9
-rw-r--r--boost/container/slist.hpp49
-rw-r--r--boost/container/small_vector.hpp17
-rw-r--r--boost/container/stable_vector.hpp86
-rw-r--r--boost/container/static_vector.hpp8
-rw-r--r--boost/container/string.hpp176
-rw-r--r--boost/container/uses_allocator.hpp169
-rw-r--r--boost/container/uses_allocator_fwd.hpp73
-rw-r--r--boost/container/vector.hpp284
-rw-r--r--boost/context/detail/config.hpp13
-rw-r--r--boost/context/detail/invoke.hpp56
-rw-r--r--boost/context/execution_context.ipp470
-rw-r--r--boost/context/execution_context_winfib.ipp407
-rw-r--r--boost/context/fixedsize_stack.hpp5
-rw-r--r--boost/context/posix/protected_fixedsize_stack.hpp2
-rw-r--r--boost/context/posix/segmented_stack.hpp3
-rw-r--r--boost/context/stack_context.hpp8
-rw-r--r--boost/context/windows/protected_fixedsize_stack.hpp4
-rw-r--r--boost/convert/base.hpp47
-rw-r--r--boost/convert/detail/forward.hpp1
-rw-r--r--boost/convert/detail/range.hpp29
-rw-r--r--boost/convert/spirit.hpp4
-rw-r--r--boost/convert/stream.hpp2
-rw-r--r--boost/convert/strtol.hpp21
-rw-r--r--boost/core/demangle.hpp11
-rw-r--r--boost/core/enable_if.hpp9
-rw-r--r--boost/coroutine/asymmetric_coroutine.hpp288
-rw-r--r--boost/coroutine/detail/symmetric_coroutine_call.hpp144
-rw-r--r--boost/coroutine/posix/protected_stack_allocator.hpp2
-rw-r--r--boost/coroutine/windows/protected_stack_allocator.hpp2
-rw-r--r--boost/coroutine2/detail/config.hpp12
-rw-r--r--boost/coroutine2/detail/pull_control_block.hpp33
-rw-r--r--boost/coroutine2/detail/pull_control_block.ipp221
-rw-r--r--boost/coroutine2/detail/pull_coroutine.hpp12
-rw-r--r--boost/coroutine2/detail/pull_coroutine.ipp15
-rw-r--r--boost/coroutine2/detail/push_control_block.hpp17
-rw-r--r--boost/coroutine2/detail/push_control_block.ipp212
-rw-r--r--boost/coroutine2/detail/push_coroutine.ipp7
-rw-r--r--boost/coroutine2/fixedsize_stack.hpp3
-rw-r--r--boost/coroutine2/segmented_stack.hpp3
-rw-r--r--boost/cstdint.hpp2
-rw-r--r--boost/date_time/date.hpp4
-rw-r--r--boost/date_time/gregorian_calendar.ipp10
-rw-r--r--boost/date_time/int_adapter.hpp4
-rw-r--r--boost/date_time/posix_time/posix_time_duration.hpp6
-rw-r--r--boost/date_time/time_system_counted.hpp2
-rw-r--r--boost/detail/is_incrementable.hpp54
-rw-r--r--boost/detail/winapi/GetCurrentProcess.hpp15
-rw-r--r--boost/detail/winapi/GetCurrentThread.hpp22
-rw-r--r--boost/detail/winapi/GetLastError.hpp14
-rw-r--r--boost/detail/winapi/GetProcessTimes.hpp51
-rw-r--r--boost/detail/winapi/GetThreadTimes.hpp42
-rw-r--r--boost/detail/winapi/LocalFree.hpp33
-rw-r--r--boost/detail/winapi/apc.hpp47
-rw-r--r--boost/detail/winapi/basic_types.hpp249
-rw-r--r--boost/detail/winapi/condition_variable.hpp116
-rw-r--r--boost/detail/winapi/config.hpp21
-rw-r--r--boost/detail/winapi/critical_section.hpp184
-rw-r--r--boost/detail/winapi/crypt.hpp223
-rw-r--r--boost/detail/winapi/detail/cast_ptr.hpp40
-rw-r--r--boost/detail/winapi/directory_management.hpp93
-rw-r--r--boost/detail/winapi/dll.hpp230
-rw-r--r--boost/detail/winapi/error_handling.hpp161
-rw-r--r--boost/detail/winapi/event.hpp183
-rw-r--r--boost/detail/winapi/file_management.hpp471
-rw-r--r--boost/detail/winapi/file_mapping.hpp170
-rw-r--r--boost/detail/winapi/handles.hpp59
-rw-r--r--boost/detail/winapi/heap_memory.hpp72
-rw-r--r--boost/detail/winapi/init_once.hpp123
-rw-r--r--boost/detail/winapi/local_memory.hpp51
-rw-r--r--boost/detail/winapi/memory.hpp46
-rw-r--r--boost/detail/winapi/mutex.hpp181
-rw-r--r--boost/detail/winapi/process.hpp20
-rw-r--r--boost/detail/winapi/security.hpp95
-rw-r--r--boost/detail/winapi/semaphore.hpp170
-rw-r--r--boost/detail/winapi/srw_lock.hpp105
-rw-r--r--boost/detail/winapi/synchronization.hpp285
-rw-r--r--boost/detail/winapi/system.hpp81
-rw-r--r--boost/detail/winapi/thread.hpp41
-rw-r--r--boost/detail/winapi/thread_pool.hpp130
-rw-r--r--boost/detail/winapi/time.hpp170
-rw-r--r--boost/detail/winapi/timers.hpp42
-rw-r--r--boost/detail/winapi/tls.hpp49
-rw-r--r--boost/detail/winapi/wait.hpp84
-rw-r--r--boost/detail/winapi/waitable_timer.hpp148
-rw-r--r--boost/endian/conversion.hpp9
-rw-r--r--boost/exception/exception.hpp10
-rw-r--r--boost/filesystem.hpp1
-rw-r--r--boost/filesystem/config.hpp3
-rw-r--r--boost/filesystem/operations.hpp308
-rw-r--r--boost/filesystem/path.hpp115
-rw-r--r--boost/filesystem/string_file.hpp43
-rw-r--r--boost/flyweight/assoc_container_factory.hpp6
-rw-r--r--boost/flyweight/flyweight.hpp6
-rw-r--r--boost/flyweight/flyweight_fwd.hpp15
-rw-r--r--boost/flyweight/serialize.hpp4
-rw-r--r--boost/format/feed_args.hpp4
-rw-r--r--boost/functional/hash/hash.hpp2
-rw-r--r--boost/fusion/algorithm/iteration/accumulate.hpp15
-rw-r--r--boost/fusion/algorithm/iteration/accumulate_fwd.hpp15
-rw-r--r--boost/fusion/algorithm/iteration/detail/fold.hpp530
-rw-r--r--boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp447
-rw-r--r--boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp447
-rw-r--r--boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp447
-rw-r--r--boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp447
-rw-r--r--boost/fusion/algorithm/iteration/detail/segmented_fold.hpp7
-rw-r--r--boost/fusion/algorithm/iteration/fold.hpp12
-rw-r--r--boost/fusion/algorithm/iteration/fold_fwd.hpp4
-rw-r--r--boost/fusion/algorithm/iteration/iter_fold.hpp13
-rw-r--r--boost/fusion/algorithm/iteration/iter_fold_fwd.hpp4
-rw-r--r--boost/fusion/algorithm/iteration/reverse_fold.hpp12
-rw-r--r--boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp4
-rw-r--r--boost/fusion/algorithm/iteration/reverse_iter_fold.hpp12
-rw-r--r--boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp4
-rw-r--r--boost/fusion/algorithm/transformation/erase.hpp1
-rw-r--r--boost/fusion/algorithm/transformation/flatten.hpp4
-rw-r--r--boost/fusion/algorithm/transformation/insert.hpp1
-rw-r--r--boost/fusion/algorithm/transformation/insert_range.hpp1
-rw-r--r--boost/fusion/container/deque/deque.hpp3
-rw-r--r--boost/fusion/container/deque/detail/convert_impl.hpp9
-rw-r--r--boost/fusion/container/deque/detail/cpp03/build_deque.hpp1
-rw-r--r--boost/fusion/container/deque/detail/cpp03/deque.hpp4
-rw-r--r--boost/fusion/container/deque/detail/cpp03/preprocessed/deque10.hpp4
-rw-r--r--boost/fusion/container/deque/detail/cpp03/preprocessed/deque20.hpp4
-rw-r--r--boost/fusion/container/deque/detail/cpp03/preprocessed/deque30.hpp4
-rw-r--r--boost/fusion/container/deque/detail/cpp03/preprocessed/deque40.hpp4
-rw-r--r--boost/fusion/container/deque/detail/cpp03/preprocessed/deque50.hpp4
-rw-r--r--boost/fusion/container/generation/make_set.hpp41
-rw-r--r--boost/fusion/container/generation/make_vector.hpp61
-rw-r--r--boost/fusion/container/generation/vector_tie.hpp29
-rw-r--r--boost/fusion/container/set/detail/as_set.hpp50
-rw-r--r--boost/fusion/container/set/detail/convert_impl.hpp2
-rw-r--r--boost/fusion/container/set/set.hpp120
-rw-r--r--boost/fusion/container/set/set_fwd.hpp27
-rw-r--r--boost/fusion/container/vector.hpp19
-rw-r--r--boost/fusion/container/vector/detail/as_vector.hpp53
-rw-r--r--boost/fusion/container/vector/detail/at_impl.hpp9
-rw-r--r--boost/fusion/container/vector/detail/config.hpp36
-rw-r--r--boost/fusion/container/vector/detail/cpp03/limits.hpp1
-rw-r--r--boost/fusion/container/vector/detail/deref_impl.hpp6
-rw-r--r--boost/fusion/container/vector/detail/value_at_impl.hpp39
-rw-r--r--boost/fusion/container/vector/detail/value_of_impl.hpp6
-rw-r--r--boost/fusion/container/vector/vector.hpp322
-rw-r--r--boost/fusion/container/vector/vector10.hpp10
-rw-r--r--boost/fusion/container/vector/vector20.hpp10
-rw-r--r--boost/fusion/container/vector/vector30.hpp10
-rw-r--r--boost/fusion/container/vector/vector40.hpp10
-rw-r--r--boost/fusion/container/vector/vector50.hpp10
-rw-r--r--boost/fusion/container/vector/vector_fwd.hpp26
-rw-r--r--boost/fusion/functional/adapter/limits.hpp11
-rw-r--r--boost/fusion/functional/invocation/invoke.hpp8
-rw-r--r--boost/fusion/functional/invocation/invoke_function_object.hpp10
-rw-r--r--boost/fusion/functional/invocation/invoke_procedure.hpp4
-rw-r--r--boost/fusion/sequence/io/detail/manip.hpp3
-rw-r--r--boost/fusion/support/detail/enabler.hpp18
-rw-r--r--boost/fusion/support/detail/is_same_size.hpp29
-rw-r--r--boost/fusion/support/detail/result_of.hpp53
-rw-r--r--boost/fusion/support/segmented_fold_until.hpp5
-rw-r--r--boost/fusion/tuple/make_tuple.hpp31
-rw-r--r--boost/fusion/tuple/tuple.hpp75
-rw-r--r--boost/fusion/tuple/tuple_fwd.hpp26
-rw-r--r--boost/fusion/tuple/tuple_tie.hpp19
-rw-r--r--boost/fusion/view/detail/strictest_traversal.hpp2
-rw-r--r--boost/fusion/view/flatten_view.hpp4
-rw-r--r--boost/fusion/view/flatten_view/flatten_view.hpp4
-rw-r--r--boost/fusion/view/flatten_view/flatten_view_iterator.hpp4
-rw-r--r--boost/fusion/view/nview/detail/advance_impl.hpp9
-rw-r--r--boost/fusion/view/nview/detail/at_impl.hpp3
-rw-r--r--boost/fusion/view/nview/detail/begin_impl.hpp5
-rw-r--r--boost/fusion/view/nview/detail/cpp03/nview_impl.hpp5
-rw-r--r--boost/fusion/view/nview/detail/deref_impl.hpp6
-rw-r--r--boost/fusion/view/nview/detail/end_impl.hpp5
-rw-r--r--boost/fusion/view/nview/detail/next_impl.hpp8
-rw-r--r--boost/fusion/view/nview/detail/nview_impl.hpp32
-rw-r--r--boost/fusion/view/nview/detail/prior_impl.hpp8
-rw-r--r--boost/fusion/view/nview/nview.hpp8
-rw-r--r--boost/fusion/view/nview/nview_iterator.hpp3
-rw-r--r--boost/geometry/algorithms/centroid.hpp23
-rw-r--r--boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp23
-rw-r--r--boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp11
-rw-r--r--boost/geometry/algorithms/detail/buffer/buffered_ring.hpp12
-rw-r--r--boost/geometry/algorithms/detail/disjoint/box_box.hpp13
-rw-r--r--boost/geometry/algorithms/detail/disjoint/point_box.hpp13
-rw-r--r--boost/geometry/algorithms/detail/distance/segment_to_box.hpp21
-rw-r--r--boost/geometry/algorithms/detail/expand_by_epsilon.hpp113
-rw-r--r--boost/geometry/algorithms/detail/is_simple/areal.hpp12
-rw-r--r--boost/geometry/algorithms/detail/is_simple/linear.hpp5
-rw-r--r--boost/geometry/algorithms/detail/is_simple/multipoint.hpp4
-rw-r--r--boost/geometry/algorithms/detail/is_valid/box.hpp17
-rw-r--r--boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp151
-rw-r--r--boost/geometry/algorithms/detail/is_valid/linear.hpp6
-rw-r--r--boost/geometry/algorithms/detail/is_valid/pointlike.hpp13
-rw-r--r--boost/geometry/algorithms/detail/is_valid/polygon.hpp5
-rw-r--r--boost/geometry/algorithms/detail/is_valid/ring.hpp25
-rw-r--r--boost/geometry/algorithms/detail/is_valid/segment.hpp11
-rw-r--r--boost/geometry/algorithms/detail/overlay/clip_linestring.hpp13
-rw-r--r--boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp32
-rw-r--r--boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp21
-rw-r--r--boost/geometry/algorithms/detail/overlay/get_turn_info.hpp26
-rw-r--r--boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp4
-rw-r--r--boost/geometry/algorithms/detail/overlay/get_turns.hpp6
-rw-r--r--boost/geometry/algorithms/detail/overlay/handle_colocations.hpp278
-rw-r--r--boost/geometry/algorithms/detail/overlay/inconsistent_turns_exception.hpp38
-rw-r--r--boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp22
-rw-r--r--boost/geometry/algorithms/detail/overlay/intersection_insert.hpp124
-rw-r--r--boost/geometry/algorithms/detail/overlay/overlay.hpp25
-rw-r--r--boost/geometry/algorithms/detail/overlay/traversal_info.hpp2
-rw-r--r--boost/geometry/algorithms/detail/overlay/traverse.hpp24
-rw-r--r--boost/geometry/algorithms/detail/overlay/turn_info.hpp11
-rw-r--r--boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp46
-rw-r--r--boost/geometry/algorithms/detail/relate/areal_areal.hpp38
-rw-r--r--boost/geometry/algorithms/detail/relate/boundary_checker.hpp40
-rw-r--r--boost/geometry/algorithms/detail/relate/topology_check.hpp36
-rw-r--r--boost/geometry/algorithms/detail/relate/turns.hpp4
-rw-r--r--boost/geometry/algorithms/detail/sections/section_functions.hpp5
-rw-r--r--boost/geometry/algorithms/detail/sections/sectionalize.hpp21
-rw-r--r--boost/geometry/algorithms/overlaps.hpp16
-rw-r--r--boost/geometry/algorithms/touches.hpp31
-rw-r--r--boost/geometry/algorithms/validity_failure_type.hpp5
-rw-r--r--boost/geometry/arithmetic/determinant.hpp2
-rw-r--r--boost/geometry/core/exception.hpp1
-rw-r--r--boost/geometry/index/detail/is_bounding_geometry.hpp35
-rw-r--r--boost/geometry/index/detail/is_indexable.hpp47
-rw-r--r--boost/geometry/index/detail/rtree/node/node.hpp40
-rw-r--r--boost/geometry/index/detail/rtree/node/node_elements.hpp17
-rw-r--r--boost/geometry/index/detail/rtree/pack_create.hpp24
-rw-r--r--boost/geometry/index/detail/rtree/rstar/insert.hpp20
-rw-r--r--boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp20
-rw-r--r--boost/geometry/index/detail/rtree/visitors/children_box.hpp4
-rw-r--r--boost/geometry/index/detail/rtree/visitors/insert.hpp48
-rw-r--r--boost/geometry/index/detail/rtree/visitors/remove.hpp15
-rw-r--r--boost/geometry/index/indexable.hpp27
-rw-r--r--boost/geometry/index/rtree.hpp27
-rw-r--r--boost/geometry/policies/is_valid/failing_reason_policy.hpp2
-rw-r--r--boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp2
-rw-r--r--boost/geometry/strategies/cartesian/box_in_box.hpp29
-rw-r--r--boost/geometry/strategies/cartesian/point_in_box.hpp11
-rw-r--r--boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp2
-rw-r--r--boost/geometry/strategies/transform/inverse_transformer.hpp3
-rw-r--r--boost/geometry/strategies/transform/matrix_transformers.hpp3
-rw-r--r--boost/geometry/util/has_infinite_coordinate.hpp55
-rw-r--r--boost/geometry/util/has_nan_coordinate.hpp99
-rw-r--r--boost/geometry/util/has_non_finite_coordinate.hpp55
-rw-r--r--boost/geometry/util/math.hpp77
-rw-r--r--boost/heap/binomial_heap.hpp5
-rw-r--r--boost/icl/concept/interval.hpp6
-rw-r--r--boost/icl/concept/interval_associator.hpp4
-rw-r--r--boost/icl/concept/interval_associator_base.hpp4
-rw-r--r--boost/icl/concept/interval_map.hpp8
-rw-r--r--boost/icl/detail/concept_check.hpp4
-rw-r--r--boost/icl/detail/interval_set_algo.hpp10
-rw-r--r--boost/icl/detail/subset_comparer.hpp4
-rw-r--r--boost/icl/interval_base_map.hpp3
-rw-r--r--boost/icl/map.hpp1
-rw-r--r--boost/icl/type_traits/has_inverse.hpp4
-rw-r--r--boost/icl/type_traits/infinity.hpp15
-rw-r--r--boost/icl/type_traits/is_interval_separator.hpp2
-rw-r--r--boost/icl/type_traits/is_numeric.hpp1
-rw-r--r--boost/interprocess/containers/pair.hpp1
-rw-r--r--boost/interprocess/detail/config_begin.hpp5
-rw-r--r--boost/interprocess/detail/config_end.hpp3
-rw-r--r--boost/interprocess/detail/os_thread_functions.hpp23
-rw-r--r--boost/interprocess/detail/posix_time_types_wrk.hpp5
-rw-r--r--boost/interprocess/detail/std_fwd.hpp40
-rw-r--r--boost/interprocess/detail/utilities.hpp26
-rw-r--r--boost/interprocess/detail/win32_api.hpp45
-rw-r--r--boost/interprocess/detail/workaround.hpp3
-rw-r--r--boost/interprocess/interprocess_fwd.hpp13
-rw-r--r--boost/interprocess/mapped_region.hpp4
-rw-r--r--boost/interprocess/offset_ptr.hpp398
-rw-r--r--boost/interprocess/sync/interprocess_mutex.hpp2
-rw-r--r--boost/interprocess/sync/interprocess_recursive_mutex.hpp2
-rw-r--r--boost/interprocess/sync/interprocess_semaphore.hpp2
-rw-r--r--boost/intrusive/avl_set.hpp4
-rw-r--r--boost/intrusive/bs_set.hpp4
-rw-r--r--boost/intrusive/bstree.hpp172
-rw-r--r--boost/intrusive/detail/ebo_functor_holder.hpp132
-rw-r--r--boost/intrusive/detail/has_member_function_callable_with.hpp13
-rw-r--r--boost/intrusive/detail/key_nodeptr_comp.hpp10
-rw-r--r--boost/intrusive/detail/math.hpp22
-rw-r--r--boost/intrusive/detail/parent_from_member.hpp4
-rw-r--r--boost/intrusive/detail/std_fwd.hpp30
-rw-r--r--boost/intrusive/detail/tree_iterator.hpp21
-rw-r--r--boost/intrusive/detail/tree_value_compare.hpp23
-rw-r--r--boost/intrusive/intrusive_fwd.hpp14
-rw-r--r--boost/intrusive/pointer_plus_bits.hpp14
-rw-r--r--boost/intrusive/pointer_traits.hpp14
-rw-r--r--boost/intrusive/rbtree_algorithms.hpp4
-rw-r--r--boost/intrusive/set.hpp4
-rw-r--r--boost/intrusive/sg_set.hpp4
-rw-r--r--boost/intrusive/sgtree.hpp17
-rw-r--r--boost/intrusive/splay_set.hpp4
-rw-r--r--boost/intrusive/treap_set.hpp4
-rw-r--r--boost/iterator/zip_iterator.hpp425
-rw-r--r--boost/lambda/detail/lambda_functors.hpp2
-rw-r--r--boost/lexical_cast.hpp7
-rw-r--r--boost/lexical_cast/detail/converter_lexical.hpp7
-rw-r--r--boost/lexical_cast/try_lexical_convert.hpp13
-rw-r--r--boost/locale/boundary/boundary_point.hpp8
-rw-r--r--boost/locale/boundary/facets.hpp4
-rw-r--r--boost/locale/boundary/index.hpp16
-rw-r--r--boost/locale/boundary/segment.hpp9
-rw-r--r--boost/locale/conversion.hpp4
-rw-r--r--boost/locale/encoding.hpp4
-rw-r--r--boost/locale/format.hpp4
-rw-r--r--boost/locale/generic_codecvt.hpp676
-rw-r--r--boost/locale/gnu_gettext.hpp4
-rw-r--r--boost/locale/message.hpp8
-rw-r--r--boost/locale/utf8_codecvt.hpp69
-rw-r--r--boost/locale/util.hpp15
-rw-r--r--boost/lockfree/detail/atomic.hpp19
-rw-r--r--boost/lockfree/detail/branch_hints.hpp38
-rw-r--r--boost/lockfree/detail/freelist.hpp2
-rw-r--r--boost/lockfree/detail/tagged_ptr_dcas.hpp1
-rw-r--r--boost/lockfree/detail/tagged_ptr_ptrcompression.hpp5
-rw-r--r--boost/lockfree/queue.hpp8
-rw-r--r--boost/lockfree/spsc_queue.hpp8
-rw-r--r--boost/log/attributes/attribute_set.hpp13
-rw-r--r--boost/log/attributes/counter.hpp166
-rw-r--r--boost/log/detail/adaptive_mutex.hpp (renamed from boost/log/detail/spin_mutex.hpp)165
-rw-r--r--boost/log/detail/code_conversion.hpp15
-rw-r--r--boost/log/detail/config.hpp31
-rw-r--r--boost/log/detail/is_character_type.hpp2
-rw-r--r--boost/log/detail/light_rw_mutex.hpp49
-rw-r--r--boost/log/detail/setup_config.hpp15
-rw-r--r--boost/log/detail/thread_specific.hpp10
-rw-r--r--boost/log/expressions/formatter.hpp215
-rw-r--r--boost/log/expressions/formatters/char_decorator.hpp26
-rw-r--r--boost/log/sinks/async_frontend.hpp72
-rw-r--r--boost/log/sinks/unbounded_fifo_queue.hpp11
-rw-r--r--boost/log/sources/record_ostream.hpp61
-rw-r--r--boost/log/utility/formatting_ostream.hpp19
-rw-r--r--boost/log/utility/type_dispatch/dynamic_type_dispatcher.hpp2
-rw-r--r--boost/log/utility/type_dispatch/static_type_dispatcher.hpp11
-rw-r--r--boost/math/concepts/real_concept.hpp29
-rw-r--r--boost/math/concepts/std_real_concept.hpp2
-rw-r--r--boost/math/constants/constants.hpp14
-rw-r--r--boost/math/cstdfloat/cstdfloat_iostream.hpp5
-rw-r--r--boost/math/distributions/bernoulli.hpp2
-rw-r--r--boost/math/distributions/binomial.hpp2
-rw-r--r--boost/math/distributions/detail/hypergeometric_pdf.hpp2
-rw-r--r--boost/math/distributions/detail/hypergeometric_quantile.hpp46
-rw-r--r--boost/math/distributions/exponential.hpp4
-rw-r--r--boost/math/distributions/extreme_value.hpp4
-rw-r--r--boost/math/distributions/fisher_f.hpp4
-rw-r--r--boost/math/distributions/geometric.hpp2
-rw-r--r--boost/math/distributions/hypergeometric.hpp44
-rw-r--r--boost/math/distributions/inverse_gaussian.hpp15
-rw-r--r--boost/math/distributions/negative_binomial.hpp2
-rw-r--r--boost/math/distributions/non_central_beta.hpp6
-rw-r--r--boost/math/distributions/non_central_chi_squared.hpp58
-rw-r--r--boost/math/distributions/non_central_t.hpp4
-rw-r--r--boost/math/distributions/rayleigh.hpp2
-rw-r--r--boost/math/distributions/skew_normal.hpp18
-rw-r--r--boost/math/distributions/triangular.hpp12
-rw-r--r--boost/math/distributions/uniform.hpp21
-rw-r--r--boost/math/policies/error_handling.hpp124
-rw-r--r--boost/math/policies/policy.hpp108
-rw-r--r--boost/math/special_functions.hpp2
-rw-r--r--boost/math/special_functions/bernoulli.hpp2
-rw-r--r--boost/math/special_functions/bessel.hpp34
-rw-r--r--boost/math/special_functions/bessel_prime.hpp8
-rw-r--r--boost/math/special_functions/beta.hpp183
-rw-r--r--boost/math/special_functions/detail/bernoulli_details.hpp18
-rw-r--r--boost/math/special_functions/detail/bessel_derivatives_linear.hpp16
-rw-r--r--boost/math/special_functions/detail/bessel_ik.hpp6
-rw-r--r--boost/math/special_functions/detail/bessel_jn.hpp7
-rw-r--r--boost/math/special_functions/detail/bessel_jy_asym.hpp18
-rw-r--r--boost/math/special_functions/detail/bessel_jy_derivatives_series.hpp5
-rw-r--r--boost/math/special_functions/detail/bessel_yn.hpp34
-rw-r--r--boost/math/special_functions/detail/lanczos_sse2.hpp2
-rw-r--r--boost/math/special_functions/detail/polygamma.hpp8
-rw-r--r--boost/math/special_functions/detail/t_distribution_inv.hpp40
-rw-r--r--boost/math/special_functions/ellint_2.hpp13
-rw-r--r--boost/math/special_functions/ellint_d.hpp10
-rw-r--r--boost/math/special_functions/fpclassify.hpp22
-rw-r--r--boost/math/special_functions/gamma.hpp20
-rw-r--r--boost/math/special_functions/math_fwd.hpp25
-rw-r--r--boost/math/special_functions/nonfinite_num_facets.hpp5
-rw-r--r--boost/math/special_functions/owens_t.hpp84
-rw-r--r--boost/math/special_functions/powm1.hpp31
-rw-r--r--boost/math/special_functions/relative_difference.hpp134
-rw-r--r--boost/math/special_functions/trigamma.hpp28
-rw-r--r--boost/math/special_functions/ulp.hpp71
-rw-r--r--boost/math/special_functions/zeta.hpp182
-rw-r--r--boost/math/tools/big_constant.hpp6
-rw-r--r--boost/math/tools/config.hpp69
-rw-r--r--boost/math/tools/detail/polynomial_horner1_10.hpp22
-rw-r--r--boost/math/tools/detail/polynomial_horner1_11.hpp24
-rw-r--r--boost/math/tools/detail/polynomial_horner1_12.hpp26
-rw-r--r--boost/math/tools/detail/polynomial_horner1_13.hpp28
-rw-r--r--boost/math/tools/detail/polynomial_horner1_14.hpp30
-rw-r--r--boost/math/tools/detail/polynomial_horner1_15.hpp32
-rw-r--r--boost/math/tools/detail/polynomial_horner1_16.hpp34
-rw-r--r--boost/math/tools/detail/polynomial_horner1_17.hpp36
-rw-r--r--boost/math/tools/detail/polynomial_horner1_18.hpp38
-rw-r--r--boost/math/tools/detail/polynomial_horner1_19.hpp40
-rw-r--r--boost/math/tools/detail/polynomial_horner1_2.hpp6
-rw-r--r--boost/math/tools/detail/polynomial_horner1_20.hpp42
-rw-r--r--boost/math/tools/detail/polynomial_horner1_3.hpp8
-rw-r--r--boost/math/tools/detail/polynomial_horner1_4.hpp10
-rw-r--r--boost/math/tools/detail/polynomial_horner1_5.hpp12
-rw-r--r--boost/math/tools/detail/polynomial_horner1_6.hpp14
-rw-r--r--boost/math/tools/detail/polynomial_horner1_7.hpp16
-rw-r--r--boost/math/tools/detail/polynomial_horner1_8.hpp18
-rw-r--r--boost/math/tools/detail/polynomial_horner1_9.hpp20
-rw-r--r--boost/math/tools/detail/polynomial_horner2_10.hpp22
-rw-r--r--boost/math/tools/detail/polynomial_horner2_11.hpp24
-rw-r--r--boost/math/tools/detail/polynomial_horner2_12.hpp26
-rw-r--r--boost/math/tools/detail/polynomial_horner2_13.hpp28
-rw-r--r--boost/math/tools/detail/polynomial_horner2_14.hpp30
-rw-r--r--boost/math/tools/detail/polynomial_horner2_15.hpp32
-rw-r--r--boost/math/tools/detail/polynomial_horner2_16.hpp34
-rw-r--r--boost/math/tools/detail/polynomial_horner2_17.hpp36
-rw-r--r--boost/math/tools/detail/polynomial_horner2_18.hpp38
-rw-r--r--boost/math/tools/detail/polynomial_horner2_19.hpp40
-rw-r--r--boost/math/tools/detail/polynomial_horner2_2.hpp10
-rw-r--r--boost/math/tools/detail/polynomial_horner2_20.hpp42
-rw-r--r--boost/math/tools/detail/polynomial_horner2_3.hpp10
-rw-r--r--boost/math/tools/detail/polynomial_horner2_4.hpp10
-rw-r--r--boost/math/tools/detail/polynomial_horner2_5.hpp12
-rw-r--r--boost/math/tools/detail/polynomial_horner2_6.hpp14
-rw-r--r--boost/math/tools/detail/polynomial_horner2_7.hpp16
-rw-r--r--boost/math/tools/detail/polynomial_horner2_8.hpp18
-rw-r--r--boost/math/tools/detail/polynomial_horner2_9.hpp20
-rw-r--r--boost/math/tools/detail/polynomial_horner3_10.hpp22
-rw-r--r--boost/math/tools/detail/polynomial_horner3_11.hpp24
-rw-r--r--boost/math/tools/detail/polynomial_horner3_12.hpp26
-rw-r--r--boost/math/tools/detail/polynomial_horner3_13.hpp28
-rw-r--r--boost/math/tools/detail/polynomial_horner3_14.hpp30
-rw-r--r--boost/math/tools/detail/polynomial_horner3_15.hpp32
-rw-r--r--boost/math/tools/detail/polynomial_horner3_16.hpp34
-rw-r--r--boost/math/tools/detail/polynomial_horner3_17.hpp36
-rw-r--r--boost/math/tools/detail/polynomial_horner3_18.hpp38
-rw-r--r--boost/math/tools/detail/polynomial_horner3_19.hpp40
-rw-r--r--boost/math/tools/detail/polynomial_horner3_2.hpp10
-rw-r--r--boost/math/tools/detail/polynomial_horner3_20.hpp42
-rw-r--r--boost/math/tools/detail/polynomial_horner3_3.hpp10
-rw-r--r--boost/math/tools/detail/polynomial_horner3_4.hpp10
-rw-r--r--boost/math/tools/detail/polynomial_horner3_5.hpp12
-rw-r--r--boost/math/tools/detail/polynomial_horner3_6.hpp14
-rw-r--r--boost/math/tools/detail/polynomial_horner3_7.hpp16
-rw-r--r--boost/math/tools/detail/polynomial_horner3_8.hpp18
-rw-r--r--boost/math/tools/detail/polynomial_horner3_9.hpp20
-rw-r--r--boost/math/tools/detail/rational_horner1_10.hpp22
-rw-r--r--boost/math/tools/detail/rational_horner1_11.hpp24
-rw-r--r--boost/math/tools/detail/rational_horner1_12.hpp26
-rw-r--r--boost/math/tools/detail/rational_horner1_13.hpp28
-rw-r--r--boost/math/tools/detail/rational_horner1_14.hpp30
-rw-r--r--boost/math/tools/detail/rational_horner1_15.hpp32
-rw-r--r--boost/math/tools/detail/rational_horner1_16.hpp34
-rw-r--r--boost/math/tools/detail/rational_horner1_17.hpp36
-rw-r--r--boost/math/tools/detail/rational_horner1_18.hpp38
-rw-r--r--boost/math/tools/detail/rational_horner1_19.hpp40
-rw-r--r--boost/math/tools/detail/rational_horner1_2.hpp6
-rw-r--r--boost/math/tools/detail/rational_horner1_20.hpp42
-rw-r--r--boost/math/tools/detail/rational_horner1_3.hpp8
-rw-r--r--boost/math/tools/detail/rational_horner1_4.hpp10
-rw-r--r--boost/math/tools/detail/rational_horner1_5.hpp12
-rw-r--r--boost/math/tools/detail/rational_horner1_6.hpp14
-rw-r--r--boost/math/tools/detail/rational_horner1_7.hpp16
-rw-r--r--boost/math/tools/detail/rational_horner1_8.hpp18
-rw-r--r--boost/math/tools/detail/rational_horner1_9.hpp20
-rw-r--r--boost/math/tools/detail/rational_horner2_10.hpp22
-rw-r--r--boost/math/tools/detail/rational_horner2_11.hpp24
-rw-r--r--boost/math/tools/detail/rational_horner2_12.hpp26
-rw-r--r--boost/math/tools/detail/rational_horner2_13.hpp28
-rw-r--r--boost/math/tools/detail/rational_horner2_14.hpp30
-rw-r--r--boost/math/tools/detail/rational_horner2_15.hpp32
-rw-r--r--boost/math/tools/detail/rational_horner2_16.hpp34
-rw-r--r--boost/math/tools/detail/rational_horner2_17.hpp36
-rw-r--r--boost/math/tools/detail/rational_horner2_18.hpp38
-rw-r--r--boost/math/tools/detail/rational_horner2_19.hpp40
-rw-r--r--boost/math/tools/detail/rational_horner2_2.hpp10
-rw-r--r--boost/math/tools/detail/rational_horner2_20.hpp42
-rw-r--r--boost/math/tools/detail/rational_horner2_3.hpp10
-rw-r--r--boost/math/tools/detail/rational_horner2_4.hpp10
-rw-r--r--boost/math/tools/detail/rational_horner2_5.hpp12
-rw-r--r--boost/math/tools/detail/rational_horner2_6.hpp14
-rw-r--r--boost/math/tools/detail/rational_horner2_7.hpp16
-rw-r--r--boost/math/tools/detail/rational_horner2_8.hpp18
-rw-r--r--boost/math/tools/detail/rational_horner2_9.hpp20
-rw-r--r--boost/math/tools/detail/rational_horner3_10.hpp22
-rw-r--r--boost/math/tools/detail/rational_horner3_11.hpp24
-rw-r--r--boost/math/tools/detail/rational_horner3_12.hpp26
-rw-r--r--boost/math/tools/detail/rational_horner3_13.hpp28
-rw-r--r--boost/math/tools/detail/rational_horner3_14.hpp30
-rw-r--r--boost/math/tools/detail/rational_horner3_15.hpp32
-rw-r--r--boost/math/tools/detail/rational_horner3_16.hpp34
-rw-r--r--boost/math/tools/detail/rational_horner3_17.hpp36
-rw-r--r--boost/math/tools/detail/rational_horner3_18.hpp38
-rw-r--r--boost/math/tools/detail/rational_horner3_19.hpp40
-rw-r--r--boost/math/tools/detail/rational_horner3_2.hpp10
-rw-r--r--boost/math/tools/detail/rational_horner3_20.hpp42
-rw-r--r--boost/math/tools/detail/rational_horner3_3.hpp10
-rw-r--r--boost/math/tools/detail/rational_horner3_4.hpp10
-rw-r--r--boost/math/tools/detail/rational_horner3_5.hpp12
-rw-r--r--boost/math/tools/detail/rational_horner3_6.hpp14
-rw-r--r--boost/math/tools/detail/rational_horner3_7.hpp16
-rw-r--r--boost/math/tools/detail/rational_horner3_8.hpp18
-rw-r--r--boost/math/tools/detail/rational_horner3_9.hpp20
-rw-r--r--boost/math/tools/fraction.hpp18
-rw-r--r--boost/math/tools/minima.hpp2
-rw-r--r--boost/math/tools/precision.hpp136
-rw-r--r--boost/math/tools/promotion.hpp21
-rw-r--r--boost/math/tools/rational.hpp32
-rw-r--r--boost/math/tools/real_cast.hpp4
-rw-r--r--boost/math/tools/roots.hpp451
-rw-r--r--boost/math/tools/series.hpp16
-rw-r--r--boost/math/tools/toms748_solve.hpp6
-rw-r--r--boost/math/tools/traits.hpp7
-rw-r--r--boost/math/tools/workaround.hpp4
-rw-r--r--boost/math/tr1.hpp5
-rw-r--r--boost/move/core.hpp4
-rw-r--r--boost/move/default_delete.hpp6
-rw-r--r--boost/move/detail/fwd_macros.hpp266
-rw-r--r--boost/move/detail/iterator_traits.hpp18
-rw-r--r--boost/move/detail/meta_utils.hpp5
-rw-r--r--boost/move/detail/move_helpers.hpp322
-rw-r--r--boost/move/detail/std_ns_begin.hpp30
-rw-r--r--boost/move/detail/std_ns_end.hpp14
-rw-r--r--boost/move/detail/type_traits.hpp4
-rw-r--r--boost/move/unique_ptr.hpp4
-rw-r--r--boost/move/utility_core.hpp2
-rw-r--r--boost/mpi/collectives/reduce.hpp4
-rw-r--r--boost/mpi/collectives/scan.hpp2
-rw-r--r--boost/mpi/detail/forward_skeleton_iarchive.hpp4
-rw-r--r--boost/mpi/detail/forward_skeleton_oarchive.hpp4
-rw-r--r--boost/mpi/detail/ignore_skeleton_oarchive.hpp4
-rw-r--r--boost/mpl/string.hpp2
-rw-r--r--boost/multi_index/detail/ord_index_impl.hpp2
-rw-r--r--boost/multi_index/global_fun.hpp10
-rw-r--r--boost/multi_index/hashed_index.hpp2
-rw-r--r--boost/multi_index/identity.hpp10
-rw-r--r--boost/multi_index/random_access_index.hpp2
-rw-r--r--boost/multi_index/ranked_index.hpp6
-rw-r--r--boost/multi_index/sequenced_index.hpp2
-rw-r--r--boost/multiprecision/concepts/mp_number_archetypes.hpp2
-rw-r--r--boost/multiprecision/cpp_bin_float.hpp22
-rw-r--r--boost/multiprecision/cpp_int.hpp195
-rw-r--r--boost/multiprecision/cpp_int/bitwise.hpp9
-rw-r--r--boost/multiprecision/cpp_int/divide.hpp16
-rw-r--r--boost/multiprecision/cpp_int/import_export.hpp200
-rw-r--r--boost/multiprecision/cpp_int/limits.hpp2
-rw-r--r--boost/multiprecision/detail/default_ops.hpp4
-rw-r--r--boost/multiprecision/detail/functions/trig.hpp12
-rw-r--r--boost/multiprecision/detail/number_base.hpp186
-rw-r--r--boost/multiprecision/float128.hpp4
-rw-r--r--boost/multiprecision/gmp.hpp6
-rw-r--r--boost/multiprecision/miller_rabin.hpp2
-rw-r--r--boost/multiprecision/mpfi.hpp10
-rw-r--r--boost/multiprecision/mpfr.hpp52
-rw-r--r--boost/multiprecision/number.hpp70
-rw-r--r--boost/multiprecision/random.hpp583
-rw-r--r--boost/multiprecision/tommath.hpp2
-rw-r--r--boost/multiprecision/traits/is_byte_container.hpp33
-rw-r--r--boost/none.hpp12
-rw-r--r--boost/none_t.hpp18
-rw-r--r--boost/numeric/odeint.hpp1
-rw-r--r--boost/numeric/odeint/algebra/default_operations.hpp4
-rw-r--r--boost/numeric/odeint/integrate/check_adapter.hpp222
-rw-r--r--boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp17
-rw-r--r--boost/numeric/odeint/integrate/detail/integrate_const.hpp24
-rw-r--r--boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp18
-rw-r--r--boost/numeric/odeint/integrate/detail/integrate_times.hpp22
-rw-r--r--boost/numeric/odeint/integrate/integrate_adaptive.hpp2
-rw-r--r--boost/numeric/odeint/integrate/integrate_const.hpp203
-rw-r--r--boost/numeric/odeint/integrate/integrate_n_steps.hpp82
-rw-r--r--boost/numeric/odeint/integrate/integrate_times.hpp109
-rw-r--r--boost/numeric/odeint/integrate/max_step_checker.hpp114
-rw-r--r--boost/numeric/odeint/stepper/bulirsch_stoer.hpp20
-rw-r--r--boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp40
-rw-r--r--boost/numeric/odeint/stepper/controlled_runge_kutta.hpp236
-rw-r--r--boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp20
-rw-r--r--boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp14
-rw-r--r--boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp13
-rw-r--r--boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp7
-rw-r--r--boost/numeric/odeint/stepper/generation/make_controlled.hpp22
-rw-r--r--boost/numeric/odeint/stepper/generation/make_dense_output.hpp22
-rw-r--r--boost/numeric/odeint/stepper/rosenbrock4_controller.hpp32
-rw-r--r--boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp11
-rw-r--r--boost/numeric/odeint/util/detail/less_with_sign.hpp6
-rw-r--r--boost/numeric/odeint/util/odeint_error.hpp77
-rw-r--r--boost/numeric/odeint/util/resize.hpp2
-rw-r--r--boost/numeric/odeint/util/resizer.hpp2
-rw-r--r--boost/numeric/odeint/util/same_size.hpp2
-rw-r--r--boost/numeric/odeint/util/unwrap_reference.hpp2
-rw-r--r--boost/operators.hpp14
-rw-r--r--boost/optional/optional_io.hpp4
-rw-r--r--boost/phoenix/config.hpp68
-rw-r--r--boost/phoenix/function/adapt_function.hpp1
-rw-r--r--boost/phoenix/function/function.hpp75
-rw-r--r--boost/phoenix/function/lazy_list.hpp24
-rw-r--r--boost/phoenix/function/lazy_operator.hpp175
-rw-r--r--boost/phoenix/function/lazy_reuse.hpp58
-rw-r--r--boost/phoenix/function/lazy_signature.hpp335
-rw-r--r--boost/phoenix/function/lazy_smart.hpp153
-rw-r--r--boost/phoenix/statement/detail/catch_push_back.hpp44
-rw-r--r--boost/phoenix/statement/detail/preprocessed/catch_push_back_10.hpp324
-rw-r--r--boost/phoenix/statement/detail/preprocessed/catch_push_back_20.hpp684
-rw-r--r--boost/phoenix/statement/detail/preprocessed/catch_push_back_30.hpp1044
-rw-r--r--boost/phoenix/statement/detail/preprocessed/catch_push_back_40.hpp1404
-rw-r--r--boost/phoenix/statement/detail/preprocessed/catch_push_back_50.hpp1764
-rw-r--r--boost/phoenix/statement/detail/preprocessed/try_catch_eval_10.hpp38
-rw-r--r--boost/phoenix/statement/detail/preprocessed/try_catch_eval_20.hpp78
-rw-r--r--boost/phoenix/statement/detail/preprocessed/try_catch_eval_30.hpp118
-rw-r--r--boost/phoenix/statement/detail/preprocessed/try_catch_eval_40.hpp158
-rw-r--r--boost/phoenix/statement/detail/preprocessed/try_catch_eval_50.hpp198
-rw-r--r--boost/phoenix/statement/detail/try_catch_eval.hpp4
-rw-r--r--boost/phoenix/statement/try_catch.hpp182
-rw-r--r--boost/phoenix/stl/algorithm/detail/begin.hpp10
-rw-r--r--boost/phoenix/stl/algorithm/detail/end.hpp12
-rw-r--r--boost/phoenix/stl/algorithm/detail/has_find.hpp5
-rw-r--r--boost/phoenix/stl/algorithm/detail/is_unordered_set_or_map.hpp144
-rw-r--r--boost/phoenix/stl/algorithm/detail/std_unordered_set_or_map_fwd.hpp73
-rw-r--r--boost/phoenix/stl/algorithm/querying.hpp102
-rw-r--r--boost/phoenix/stl/algorithm/transformation.hpp58
-rw-r--r--boost/polygon/detail/boolean_op.hpp6
-rw-r--r--boost/polygon/detail/boolean_op_45.hpp4
-rw-r--r--boost/polygon/detail/polygon_45_formation.hpp17
-rw-r--r--boost/polygon/detail/polygon_90_set_view.hpp4
-rw-r--r--boost/polygon/detail/polygon_arbitrary_formation.hpp38
-rw-r--r--boost/polygon/detail/polygon_formation.hpp374
-rw-r--r--boost/polygon/detail/property_merge.hpp6
-rw-r--r--boost/polygon/detail/rectangle_formation.hpp2
-rw-r--r--boost/polygon/detail/scan_arbitrary.hpp2
-rw-r--r--boost/polygon/isotropy.hpp24
-rw-r--r--boost/polygon/point_data.hpp8
-rw-r--r--boost/polygon/polygon_45_set_data.hpp4
-rw-r--r--boost/polygon/polygon_90_set_data.hpp6
-rw-r--r--boost/polygon/polygon_set_data.hpp6
-rw-r--r--boost/polygon/polygon_traits.hpp12
-rw-r--r--boost/polygon/segment_data.hpp2
-rw-r--r--boost/pool/detail/mutex.hpp2
-rw-r--r--boost/predef.h1
-rw-r--r--boost/predef/detail/_cassert.h2
-rw-r--r--boost/predef/detail/_exception.h2
-rw-r--r--boost/predef/hardware.h16
-rw-r--r--boost/predef/hardware/simd.h107
-rw-r--r--boost/predef/hardware/simd/arm.h57
-rw-r--r--boost/predef/hardware/simd/arm/versions.h32
-rw-r--r--boost/predef/hardware/simd/ppc.h69
-rw-r--r--boost/predef/hardware/simd/ppc/versions.h51
-rw-r--r--boost/predef/hardware/simd/x86.h123
-rw-r--r--boost/predef/hardware/simd/x86/versions.h129
-rw-r--r--boost/predef/hardware/simd/x86_amd.h87
-rw-r--r--boost/predef/hardware/simd/x86_amd/versions.h51
-rw-r--r--boost/predef/platform/windows_desktop.h2
-rw-r--r--boost/predef/platform/windows_phone.h2
-rw-r--r--boost/predef/platform/windows_runtime.h2
-rw-r--r--boost/predef/platform/windows_store.h2
-rw-r--r--boost/predef/version.h2
-rw-r--r--boost/preprocessor/facilities/identity.hpp4
-rw-r--r--boost/preprocessor/tuple/eat.hpp11
-rw-r--r--boost/progress.hpp7
-rw-r--r--boost/python/data_members.hpp2
-rw-r--r--boost/random.hpp5
-rw-r--r--boost/random/binomial_distribution.hpp2
-rw-r--r--boost/random/chi_squared_distribution.hpp6
-rw-r--r--boost/random/detail/auto_link.hpp12
-rw-r--r--boost/random/detail/seed_impl.hpp18
-rw-r--r--boost/random/detail/signed_unsigned_tools.hpp10
-rw-r--r--boost/random/discrete_distribution.hpp14
-rw-r--r--boost/random/generate_canonical.hpp2
-rw-r--r--boost/random/hyperexponential_distribution.hpp883
-rw-r--r--boost/random/independent_bits.hpp29
-rw-r--r--boost/random/piecewise_constant_distribution.hpp2
-rw-r--r--boost/random/piecewise_linear_distribution.hpp3
-rw-r--r--boost/random/seed_seq.hpp16
-rw-r--r--boost/random/shuffle_order.hpp2
-rw-r--r--boost/random/subtract_with_carry.hpp4
-rw-r--r--boost/random/traits.hpp107
-rw-r--r--boost/random/triangle_distribution.hpp2
-rw-r--r--boost/random/uniform_01.hpp32
-rw-r--r--boost/random/uniform_int_distribution.hpp50
-rw-r--r--boost/random/uniform_real_distribution.hpp2
-rw-r--r--boost/random/uniform_smallint.hpp32
-rw-r--r--boost/rational.hpp54
-rw-r--r--boost/regex/config.hpp58
-rw-r--r--boost/regex/icu.hpp166
-rw-r--r--boost/regex/mfc.hpp4
-rw-r--r--boost/regex/pattern_except.hpp4
-rw-r--r--boost/regex/v4/basic_regex.hpp31
-rw-r--r--boost/regex/v4/basic_regex_creator.hpp42
-rw-r--r--boost/regex/v4/basic_regex_parser.hpp212
-rw-r--r--boost/regex/v4/cpp_regex_traits.hpp211
-rw-r--r--boost/regex/v4/cregex.hpp14
-rw-r--r--boost/regex/v4/fileiter.hpp18
-rw-r--r--boost/regex/v4/instances.hpp21
-rw-r--r--boost/regex/v4/iterator_traits.hpp4
-rw-r--r--boost/regex/v4/match_results.hpp34
-rw-r--r--boost/regex/v4/mem_block_cache.hpp2
-rw-r--r--boost/regex/v4/perl_matcher.hpp55
-rw-r--r--boost/regex/v4/perl_matcher_common.hpp40
-rw-r--r--boost/regex/v4/perl_matcher_non_recursive.hpp219
-rw-r--r--boost/regex/v4/perl_matcher_recursive.hpp126
-rw-r--r--boost/regex/v4/primary_transform.hpp4
-rw-r--r--boost/regex/v4/protected_call.hpp2
-rw-r--r--boost/regex/v4/regex_format.hpp28
-rw-r--r--boost/regex/v4/regex_grep.hpp2
-rw-r--r--boost/regex/v4/regex_iterator.hpp6
-rw-r--r--boost/regex/v4/regex_match.hpp2
-rw-r--r--boost/regex/v4/regex_raw_buffer.hpp4
-rw-r--r--boost/regex/v4/regex_replace.hpp8
-rw-r--r--boost/regex/v4/regex_search.hpp4
-rw-r--r--boost/regex/v4/regex_split.hpp8
-rw-r--r--boost/regex/v4/regex_token_iterator.hpp6
-rw-r--r--boost/regex/v4/regex_traits.hpp16
-rw-r--r--boost/regex/v4/regex_traits_defaults.hpp14
-rw-r--r--boost/regex/v4/regex_workaround.hpp7
-rw-r--r--boost/regex/v4/states.hpp26
-rw-r--r--boost/regex/v4/sub_match.hpp143
-rw-r--r--boost/regex/v4/u32regex_iterator.hpp4
-rw-r--r--boost/regex/v4/u32regex_token_iterator.hpp4
-rw-r--r--boost/regex/v4/w32_regex_traits.hpp82
-rw-r--r--boost/serialization/archive_input_unordered_map.hpp85
-rw-r--r--boost/serialization/archive_input_unordered_set.hpp70
-rw-r--r--boost/serialization/boost_unordered_map.hpp154
-rw-r--r--boost/serialization/boost_unordered_set.hpp150
-rw-r--r--boost/serialization/collections_load_imp.hpp2
-rw-r--r--boost/serialization/deque.hpp2
-rw-r--r--boost/serialization/detail/get_data.hpp2
-rw-r--r--boost/serialization/extended_type_info.hpp6
-rw-r--r--boost/serialization/extended_type_info_typeid.hpp4
-rw-r--r--boost/serialization/singleton.hpp4
-rw-r--r--boost/serialization/static_warning.hpp2
-rw-r--r--boost/serialization/unordered_map.hpp89
-rw-r--r--boost/serialization/unordered_set.hpp74
-rw-r--r--boost/serialization/variant.hpp1
-rw-r--r--boost/signals2/detail/auto_buffer.hpp4
-rw-r--r--boost/signals2/detail/variadic_slot_invoker.hpp15
-rw-r--r--boost/signals2/postconstructible.hpp2
-rw-r--r--boost/smart_ptr/detail/operator_bool.hpp3
-rw-r--r--boost/smart_ptr/detail/shared_count.hpp10
-rw-r--r--boost/smart_ptr/detail/sp_disable_deprecated.hpp40
-rw-r--r--boost/smart_ptr/detail/sp_interlocked.hpp11
-rw-r--r--boost/smart_ptr/detail/yield_k.hpp9
-rw-r--r--boost/smart_ptr/scoped_ptr.hpp10
-rw-r--r--boost/smart_ptr/shared_ptr.hpp10
-rw-r--r--boost/sort/spreadsort/detail/float_sort.hpp55
-rw-r--r--boost/sort/spreadsort/detail/string_sort.hpp2
-rw-r--r--boost/sort/spreadsort/spreadsort.hpp35
-rw-r--r--boost/spirit/home/classic/tree/parse_tree.hpp1
-rw-r--r--boost/spirit/home/karma/directive/duplicate.hpp2
-rw-r--r--boost/spirit/home/karma/directive/left_alignment.hpp4
-rw-r--r--boost/spirit/home/karma/string/lit.hpp3
-rw-r--r--boost/spirit/home/qi/detail/assign_to.hpp11
-rw-r--r--boost/spirit/home/qi/detail/attributes.hpp2
-rw-r--r--boost/spirit/home/qi/numeric/detail/numeric_utils.hpp31
-rw-r--r--boost/spirit/home/qi/numeric/detail/real_impl.hpp8
-rw-r--r--boost/spirit/home/support/attributes.hpp5
-rw-r--r--boost/spirit/home/support/char_encoding/ascii.hpp29
-rw-r--r--boost/spirit/home/support/detail/endian/endian.hpp21
-rw-r--r--boost/spirit/home/support/terminal.hpp44
-rw-r--r--boost/spirit/home/x3/char/char_set.hpp4
-rw-r--r--boost/static_assert.hpp23
-rw-r--r--boost/test/auto_unit_test.hpp2
-rw-r--r--boost/test/data/config.hpp9
-rw-r--r--boost/test/data/dataset.hpp2
-rw-r--r--boost/test/data/for_each_sample.hpp71
-rw-r--r--boost/test/data/generators.hpp2
-rw-r--r--boost/test/data/monomorphic.hpp3
-rw-r--r--boost/test/data/monomorphic/array.hpp66
-rw-r--r--boost/test/data/monomorphic/collection.hpp68
-rw-r--r--boost/test/data/monomorphic/dataset.hpp174
-rw-r--r--boost/test/data/monomorphic/fwd.hpp201
-rw-r--r--boost/test/data/monomorphic/generate.hpp53
-rw-r--r--boost/test/data/monomorphic/generators.hpp2
-rw-r--r--boost/test/data/monomorphic/generators/keywords.hpp2
-rw-r--r--boost/test/data/monomorphic/generators/random.hpp12
-rw-r--r--boost/test/data/monomorphic/generators/xrange.hpp39
-rw-r--r--boost/test/data/monomorphic/grid.hpp132
-rw-r--r--boost/test/data/monomorphic/initializer_list.hpp81
-rw-r--r--boost/test/data/monomorphic/join.hpp152
-rw-r--r--boost/test/data/monomorphic/singleton.hpp84
-rw-r--r--boost/test/data/monomorphic/zip.hpp130
-rw-r--r--boost/test/data/size.hpp2
-rw-r--r--boost/test/data/test_case.hpp22
-rw-r--r--boost/test/data/traits.hpp87
-rw-r--r--boost/test/debug.hpp2
-rw-r--r--boost/test/debug_config.hpp2
-rw-r--r--boost/test/detail/config.hpp14
-rw-r--r--boost/test/detail/enable_warnings.hpp9
-rw-r--r--boost/test/detail/fwd_decl.hpp2
-rw-r--r--boost/test/detail/global_typedef.hpp15
-rw-r--r--boost/test/detail/log_level.hpp2
-rw-r--r--boost/test/detail/pp_variadic.hpp2
-rw-r--r--boost/test/detail/suppress_warnings.hpp14
-rw-r--r--boost/test/detail/throw_exception.hpp39
-rw-r--r--boost/test/detail/workaround.hpp2
-rw-r--r--boost/test/execution_monitor.hpp14
-rw-r--r--boost/test/floating_point_comparison.hpp2
-rw-r--r--boost/test/framework.hpp15
-rw-r--r--boost/test/impl/compiler_log_formatter.ipp41
-rw-r--r--boost/test/impl/cpp_main.ipp8
-rw-r--r--boost/test/impl/debug.ipp6
-rw-r--r--boost/test/impl/decorator.ipp6
-rw-r--r--boost/test/impl/execution_monitor.ipp16
-rw-r--r--boost/test/impl/framework.ipp98
-rw-r--r--boost/test/impl/plain_report_formatter.ipp14
-rw-r--r--boost/test/impl/progress_monitor.ipp30
-rw-r--r--boost/test/impl/results_collector.ipp2
-rw-r--r--boost/test/impl/results_reporter.ipp31
-rw-r--r--boost/test/impl/test_main.ipp2
-rw-r--r--boost/test/impl/test_tools.ipp9
-rw-r--r--boost/test/impl/test_tree.ipp15
-rw-r--r--boost/test/impl/unit_test_log.ipp16
-rw-r--r--boost/test/impl/unit_test_main.ipp27
-rw-r--r--boost/test/impl/unit_test_monitor.ipp14
-rw-r--r--boost/test/impl/unit_test_parameters.ipp1085
-rw-r--r--boost/test/impl/xml_log_formatter.ipp45
-rw-r--r--boost/test/impl/xml_report_formatter.ipp25
-rw-r--r--boost/test/included/execution_monitor.hpp2
-rw-r--r--boost/test/included/prg_exec_monitor.hpp2
-rw-r--r--boost/test/included/test_exec_monitor.hpp2
-rw-r--r--boost/test/included/unit_test.hpp2
-rw-r--r--boost/test/included/unit_test_framework.hpp2
-rw-r--r--boost/test/minimal.hpp2
-rw-r--r--boost/test/output/compiler_log_formatter.hpp7
-rw-r--r--boost/test/output/plain_report_formatter.hpp5
-rw-r--r--boost/test/output/xml_log_formatter.hpp2
-rw-r--r--boost/test/output/xml_report_formatter.hpp2
-rw-r--r--boost/test/output_test_stream.hpp2
-rw-r--r--boost/test/parameterized_test.hpp2
-rw-r--r--boost/test/predicate_result.hpp2
-rw-r--r--boost/test/prg_exec_monitor.hpp2
-rw-r--r--boost/test/progress_monitor.hpp2
-rw-r--r--boost/test/results_collector.hpp2
-rw-r--r--boost/test/results_reporter.hpp2
-rw-r--r--boost/test/test_case_template.hpp2
-rw-r--r--boost/test/test_exec_monitor.hpp2
-rw-r--r--boost/test/test_tools.hpp17
-rw-r--r--boost/test/tools/assertion.hpp15
-rw-r--r--boost/test/tools/assertion_result.hpp2
-rw-r--r--boost/test/tools/collection_comparison_op.hpp23
-rw-r--r--boost/test/tools/context.hpp2
-rw-r--r--boost/test/tools/cstring_comparison_op.hpp2
-rw-r--r--boost/test/tools/detail/bitwise_manip.hpp2
-rw-r--r--boost/test/tools/detail/expression_holder.hpp2
-rw-r--r--boost/test/tools/detail/fwd.hpp2
-rw-r--r--boost/test/tools/detail/indirections.hpp2
-rw-r--r--boost/test/tools/detail/it_pair.hpp2
-rw-r--r--boost/test/tools/detail/lexicographic_manip.hpp2
-rw-r--r--boost/test/tools/detail/per_element_manip.hpp2
-rw-r--r--boost/test/tools/detail/print_helper.hpp2
-rw-r--r--boost/test/tools/detail/tolerance_manip.hpp4
-rw-r--r--boost/test/tools/floating_point_comparison.hpp4
-rw-r--r--boost/test/tools/fpc_op.hpp16
-rw-r--r--boost/test/tools/fpc_tolerance.hpp2
-rw-r--r--boost/test/tools/interface.hpp2
-rw-r--r--boost/test/tools/old/impl.hpp2
-rw-r--r--boost/test/tools/old/interface.hpp26
-rw-r--r--boost/test/tools/output_test_stream.hpp2
-rw-r--r--boost/test/tree/auto_registration.hpp2
-rw-r--r--boost/test/tree/decorator.hpp2
-rw-r--r--boost/test/tree/fixture.hpp2
-rw-r--r--boost/test/tree/global_fixture.hpp2
-rw-r--r--boost/test/tree/observer.hpp4
-rw-r--r--boost/test/tree/test_case_counter.hpp2
-rw-r--r--boost/test/tree/test_case_template.hpp2
-rw-r--r--boost/test/tree/test_unit.hpp10
-rw-r--r--boost/test/tree/traverse.hpp2
-rw-r--r--boost/test/tree/visitor.hpp2
-rw-r--r--boost/test/unit_test.hpp2
-rw-r--r--boost/test/unit_test_log.hpp2
-rw-r--r--boost/test/unit_test_log_formatter.hpp2
-rw-r--r--boost/test/unit_test_monitor.hpp2
-rw-r--r--boost/test/unit_test_parameters.hpp142
-rw-r--r--boost/test/unit_test_suite.hpp11
-rw-r--r--boost/test/utils/algorithm.hpp7
-rw-r--r--boost/test/utils/assign_op.hpp2
-rw-r--r--boost/test/utils/basic_cstring/basic_cstring.hpp2
-rw-r--r--boost/test/utils/basic_cstring/basic_cstring_fwd.hpp2
-rw-r--r--boost/test/utils/basic_cstring/bcs_char_traits.hpp2
-rw-r--r--boost/test/utils/basic_cstring/compare.hpp2
-rw-r--r--boost/test/utils/basic_cstring/io.hpp2
-rw-r--r--boost/test/utils/class_properties.hpp2
-rw-r--r--boost/test/utils/custom_manip.hpp4
-rw-r--r--boost/test/utils/fixed_mapping.hpp120
-rw-r--r--boost/test/utils/foreach.hpp2
-rw-r--r--boost/test/utils/is_cstring.hpp2
-rw-r--r--boost/test/utils/is_forward_iterable.hpp130
-rw-r--r--boost/test/utils/iterator/ifstream_line_iterator.hpp105
-rw-r--r--boost/test/utils/iterator/input_iterator_facade.hpp7
-rw-r--r--boost/test/utils/iterator/istream_line_iterator.hpp93
-rw-r--r--boost/test/utils/iterator/token_iterator.hpp23
-rw-r--r--boost/test/utils/lazy_ostream.hpp4
-rw-r--r--boost/test/utils/named_params.hpp228
-rw-r--r--boost/test/utils/nullstream.hpp2
-rw-r--r--boost/test/utils/rtti.hpp4
-rw-r--r--boost/test/utils/runtime/argument.hpp119
-rw-r--r--boost/test/utils/runtime/argument_factory.hpp242
-rw-r--r--boost/test/utils/runtime/cla/argument_factory.hpp216
-rw-r--r--boost/test/utils/runtime/cla/argv_traverser.cpp16
-rw-r--r--boost/test/utils/runtime/cla/argv_traverser.hpp133
-rw-r--r--boost/test/utils/runtime/cla/argv_traverser.ipp212
-rw-r--r--boost/test/utils/runtime/cla/basic_parameter.hpp85
-rw-r--r--boost/test/utils/runtime/cla/char_parameter.cpp16
-rw-r--r--boost/test/utils/runtime/cla/char_parameter.hpp100
-rw-r--r--boost/test/utils/runtime/cla/char_parameter.ipp57
-rw-r--r--boost/test/utils/runtime/cla/detail/argument_value_usage.hpp81
-rw-r--r--boost/test/utils/runtime/cla/dual_name_parameter.cpp16
-rw-r--r--boost/test/utils/runtime/cla/dual_name_parameter.hpp98
-rw-r--r--boost/test/utils/runtime/cla/dual_name_parameter.ipp90
-rw-r--r--boost/test/utils/runtime/cla/fwd.hpp55
-rw-r--r--boost/test/utils/runtime/cla/id_policy.cpp16
-rw-r--r--boost/test/utils/runtime/cla/id_policy.hpp147
-rw-r--r--boost/test/utils/runtime/cla/id_policy.ipp118
-rw-r--r--boost/test/utils/runtime/cla/iface/argument_factory.hpp51
-rw-r--r--boost/test/utils/runtime/cla/iface/id_policy.hpp73
-rw-r--r--boost/test/utils/runtime/cla/modifier.hpp69
-rw-r--r--boost/test/utils/runtime/cla/named_parameter.cpp16
-rw-r--r--boost/test/utils/runtime/cla/named_parameter.hpp95
-rw-r--r--boost/test/utils/runtime/cla/named_parameter.ipp129
-rw-r--r--boost/test/utils/runtime/cla/parameter.hpp151
-rw-r--r--boost/test/utils/runtime/cla/parser.cpp18
-rw-r--r--boost/test/utils/runtime/cla/parser.hpp515
-rw-r--r--boost/test/utils/runtime/cla/parser.ipp267
-rw-r--r--boost/test/utils/runtime/cla/positional_parameter.hpp91
-rw-r--r--boost/test/utils/runtime/cla/typed_parameter.hpp70
-rw-r--r--boost/test/utils/runtime/cla/validation.cpp16
-rw-r--r--boost/test/utils/runtime/cla/validation.hpp57
-rw-r--r--boost/test/utils/runtime/cla/validation.ipp61
-rw-r--r--boost/test/utils/runtime/cla/value_generator.hpp81
-rw-r--r--boost/test/utils/runtime/cla/value_handler.hpp57
-rw-r--r--boost/test/utils/runtime/config.hpp162
-rw-r--r--boost/test/utils/runtime/configuration.hpp61
-rw-r--r--boost/test/utils/runtime/env/environment.cpp23
-rw-r--r--boost/test/utils/runtime/env/environment.hpp171
-rw-r--r--boost/test/utils/runtime/env/environment.ipp125
-rw-r--r--boost/test/utils/runtime/env/fetch.hpp108
-rw-r--r--boost/test/utils/runtime/env/fwd.hpp61
-rw-r--r--boost/test/utils/runtime/env/modifier.hpp47
-rw-r--r--boost/test/utils/runtime/env/variable.hpp223
-rw-r--r--boost/test/utils/runtime/errors.hpp195
-rw-r--r--boost/test/utils/runtime/file/config_file.cpp249
-rw-r--r--boost/test/utils/runtime/file/config_file.hpp182
-rw-r--r--boost/test/utils/runtime/file/config_file_iterator.cpp685
-rw-r--r--boost/test/utils/runtime/file/config_file_iterator.hpp166
-rw-r--r--boost/test/utils/runtime/finalize.hpp56
-rw-r--r--boost/test/utils/runtime/fwd.hpp24
-rw-r--r--boost/test/utils/runtime/interpret_argument_value.hpp163
-rw-r--r--boost/test/utils/runtime/modifier.hpp101
-rw-r--r--boost/test/utils/runtime/parameter.hpp450
-rw-r--r--boost/test/utils/runtime/trace.hpp30
-rw-r--r--boost/test/utils/runtime/validation.hpp85
-rw-r--r--boost/test/utils/setcolor.hpp13
-rw-r--r--boost/test/utils/string_cast.hpp69
-rw-r--r--boost/test/utils/trivial_singleton.hpp2
-rw-r--r--boost/test/utils/wrap_stringstream.hpp2
-rw-r--r--boost/test/utils/xml_printer.hpp39
-rw-r--r--boost/thread/concurrent_queues/sync_queue.hpp7
-rw-r--r--boost/thread/concurrent_queues/sync_timed_queue.hpp2
-rw-r--r--boost/thread/csbl/devector.hpp8
-rw-r--r--boost/thread/detail/invoker.hpp36
-rw-r--r--boost/thread/detail/move.hpp19
-rw-r--r--boost/thread/detail/nullary_function.hpp2
-rw-r--r--boost/thread/detail/thread.hpp7
-rw-r--r--boost/thread/detail/thread_group.hpp3
-rw-r--r--boost/thread/executors/basic_thread_pool.hpp31
-rw-r--r--boost/thread/executors/executor.hpp5
-rw-r--r--boost/thread/executors/executor_adaptor.hpp9
-rw-r--r--boost/thread/executors/generic_executor_ref.hpp20
-rw-r--r--boost/thread/executors/loop_executor.hpp18
-rw-r--r--boost/thread/executors/serial_executor.hpp15
-rw-r--r--boost/thread/executors/serial_executor_cont.hpp2
-rw-r--r--boost/thread/executors/thread_executor.hpp1
-rwxr-xr-xboost/thread/experimental/parallel/v2/task_region.hpp2
-rw-r--r--boost/thread/future.hpp1379
-rw-r--r--boost/thread/futures/launch.hpp1
-rw-r--r--boost/thread/latch.hpp3
-rw-r--r--boost/thread/poly_lockable.hpp4
-rw-r--r--boost/thread/pthread/condition_variable.hpp141
-rw-r--r--boost/thread/pthread/condition_variable_fwd.hpp170
-rw-r--r--boost/thread/pthread/once_atomic.hpp4
-rw-r--r--boost/thread/shared_mutex.hpp1
-rw-r--r--boost/thread/v2/thread.hpp17
-rw-r--r--boost/thread/win32/condition_variable.hpp16
-rw-r--r--boost/thread/win32/shared_mutex.hpp4
-rw-r--r--boost/thread/win32/thread_data.hpp26
-rw-r--r--boost/thread/win32/thread_primitives.hpp42
-rw-r--r--boost/timer/timer.hpp2
-rw-r--r--boost/type_erasure/binding.hpp36
-rw-r--r--boost/type_erasure/detail/adapt_to_vtable.hpp38
-rw-r--r--boost/type_erasure/detail/auto_link.hpp38
-rw-r--r--boost/type_erasure/detail/check_map.hpp2
-rw-r--r--boost/type_erasure/detail/dynamic_vtable.hpp172
-rw-r--r--boost/type_erasure/detail/rebind_placeholders.hpp1
-rw-r--r--boost/type_erasure/detail/storage.hpp4
-rw-r--r--boost/type_erasure/dynamic_any_cast.hpp234
-rw-r--r--boost/type_erasure/dynamic_binding.hpp46
-rw-r--r--boost/type_erasure/is_placeholder.hpp7
-rw-r--r--boost/type_erasure/iterator.hpp7
-rw-r--r--boost/type_erasure/register_binding.hpp169
-rw-r--r--boost/type_traits.hpp72
-rw-r--r--boost/type_traits/add_const.hpp17
-rw-r--r--boost/type_traits/add_cv.hpp9
-rw-r--r--boost/type_traits/add_lvalue_reference.hpp15
-rw-r--r--boost/type_traits/add_pointer.hpp23
-rw-r--r--boost/type_traits/add_reference.hpp41
-rw-r--r--boost/type_traits/add_rvalue_reference.hpp10
-rw-r--r--boost/type_traits/add_volatile.hpp9
-rw-r--r--[-rwxr-xr-x]boost/type_traits/aligned_storage.hpp143
-rw-r--r--boost/type_traits/alignment_of.hpp25
-rw-r--r--boost/type_traits/broken_compiler_spec.hpp17
-rw-r--r--boost/type_traits/common_type.hpp249
-rw-r--r--boost/type_traits/conditional.hpp9
-rw-r--r--boost/type_traits/config.hpp61
-rw-r--r--boost/type_traits/copy_cv.hpp34
-rw-r--r--[-rwxr-xr-x]boost/type_traits/decay.hpp25
-rw-r--r--boost/type_traits/declval.hpp44
-rw-r--r--boost/type_traits/detail/bool_trait_def.hpp23
-rw-r--r--boost/type_traits/detail/common_arithmetic_type.hpp212
-rw-r--r--boost/type_traits/detail/common_type_imp.hpp333
-rw-r--r--boost/type_traits/detail/common_type_impl.hpp107
-rw-r--r--boost/type_traits/detail/composite_member_pointer_type.hpp113
-rw-r--r--boost/type_traits/detail/composite_pointer_type.hpp153
-rw-r--r--boost/type_traits/detail/config.hpp72
-rw-r--r--boost/type_traits/detail/cv_traits_impl.hpp140
-rw-r--r--boost/type_traits/detail/false_result.hpp28
-rw-r--r--boost/type_traits/detail/has_binary_operator.hpp23
-rw-r--r--boost/type_traits/detail/has_postfix_operator.hpp23
-rw-r--r--boost/type_traits/detail/has_prefix_operator.hpp25
-rw-r--r--boost/type_traits/detail/ice_and.hpp7
-rw-r--r--boost/type_traits/detail/ice_eq.hpp7
-rw-r--r--boost/type_traits/detail/ice_not.hpp7
-rw-r--r--boost/type_traits/detail/ice_or.hpp7
-rw-r--r--boost/type_traits/detail/is_function_ptr_helper.hpp18
-rw-r--r--boost/type_traits/detail/is_function_ptr_tester.hpp17
-rw-r--r--boost/type_traits/detail/is_mem_fun_pointer_impl.hpp16
-rw-r--r--boost/type_traits/detail/is_mem_fun_pointer_tester.hpp18
-rw-r--r--boost/type_traits/detail/mp_defer.hpp56
-rw-r--r--boost/type_traits/detail/size_t_trait_def.hpp51
-rw-r--r--boost/type_traits/detail/size_t_trait_undef.hpp16
-rw-r--r--boost/type_traits/detail/template_arity_spec.hpp27
-rw-r--r--boost/type_traits/detail/type_trait_def.hpp67
-rw-r--r--boost/type_traits/detail/type_trait_undef.hpp19
-rw-r--r--boost/type_traits/detail/wrap.hpp18
-rw-r--r--boost/type_traits/extent.hpp7
-rw-r--r--boost/type_traits/floating_point_promotion.hpp81
-rw-r--r--boost/type_traits/has_bit_and.hpp38
-rw-r--r--boost/type_traits/has_bit_and_assign.hpp46
-rw-r--r--boost/type_traits/has_bit_or.hpp38
-rw-r--r--boost/type_traits/has_bit_or_assign.hpp46
-rw-r--r--boost/type_traits/has_bit_xor.hpp38
-rw-r--r--boost/type_traits/has_bit_xor_assign.hpp46
-rw-r--r--boost/type_traits/has_complement.hpp14
-rw-r--r--boost/type_traits/has_dereference.hpp10
-rw-r--r--boost/type_traits/has_divides.hpp28
-rw-r--r--boost/type_traits/has_divides_assign.hpp36
-rw-r--r--boost/type_traits/has_equal_to.hpp40
-rw-r--r--boost/type_traits/has_greater.hpp40
-rw-r--r--boost/type_traits/has_greater_equal.hpp40
-rw-r--r--boost/type_traits/has_left_shift.hpp38
-rw-r--r--boost/type_traits/has_left_shift_assign.hpp46
-rw-r--r--boost/type_traits/has_less.hpp40
-rw-r--r--boost/type_traits/has_less_equal.hpp40
-rw-r--r--boost/type_traits/has_logical_and.hpp32
-rw-r--r--boost/type_traits/has_logical_or.hpp32
-rw-r--r--boost/type_traits/has_minus.hpp58
-rw-r--r--boost/type_traits/has_minus_assign.hpp58
-rw-r--r--boost/type_traits/has_modulus.hpp38
-rw-r--r--boost/type_traits/has_modulus_assign.hpp46
-rw-r--r--boost/type_traits/has_multiplies.hpp28
-rw-r--r--boost/type_traits/has_multiplies_assign.hpp36
-rw-r--r--boost/type_traits/has_new_operator.hpp23
-rw-r--r--boost/type_traits/has_not_equal_to.hpp40
-rw-r--r--boost/type_traits/has_nothrow_assign.hpp75
-rw-r--r--boost/type_traits/has_nothrow_constructor.hpp67
-rw-r--r--boost/type_traits/has_nothrow_copy.hpp75
-rw-r--r--boost/type_traits/has_nothrow_destructor.hpp30
-rw-r--r--boost/type_traits/has_plus.hpp46
-rw-r--r--boost/type_traits/has_plus_assign.hpp62
-rw-r--r--boost/type_traits/has_post_decrement.hpp22
-rw-r--r--boost/type_traits/has_post_increment.hpp22
-rw-r--r--boost/type_traits/has_pre_decrement.hpp22
-rw-r--r--boost/type_traits/has_pre_increment.hpp22
-rw-r--r--boost/type_traits/has_right_shift.hpp38
-rw-r--r--boost/type_traits/has_right_shift_assign.hpp46
-rw-r--r--boost/type_traits/has_trivial_assign.hpp52
-rw-r--r--boost/type_traits/has_trivial_constructor.hpp56
-rw-r--r--boost/type_traits/has_trivial_copy.hpp82
-rw-r--r--boost/type_traits/has_trivial_destructor.hpp43
-rw-r--r--boost/type_traits/has_trivial_move_assign.hpp65
-rw-r--r--boost/type_traits/has_trivial_move_constructor.hpp70
-rw-r--r--boost/type_traits/has_virtual_destructor.hpp9
-rw-r--r--boost/type_traits/integral_constant.hpp107
-rw-r--r--boost/type_traits/integral_promotion.hpp33
-rw-r--r--boost/type_traits/intrinsics.hpp126
-rw-r--r--boost/type_traits/is_abstract.hpp12
-rw-r--r--boost/type_traits/is_arithmetic.hpp35
-rw-r--r--boost/type_traits/is_array.hpp29
-rw-r--r--boost/type_traits/is_assignable.hpp76
-rw-r--r--boost/type_traits/is_base_and_derived.hpp24
-rw-r--r--boost/type_traits/is_base_of.hpp26
-rw-r--r--boost/type_traits/is_base_of_tr1.hpp23
-rw-r--r--boost/type_traits/is_class.hpp49
-rw-r--r--boost/type_traits/is_complex.hpp22
-rw-r--r--boost/type_traits/is_compound.hpp26
-rw-r--r--boost/type_traits/is_const.hpp60
-rw-r--r--boost/type_traits/is_constructible.hpp80
-rw-r--r--boost/type_traits/is_convertible.hpp124
-rw-r--r--boost/type_traits/is_copy_assignable.hpp18
-rw-r--r--boost/type_traits/is_copy_constructible.hpp222
-rw-r--r--boost/type_traits/is_default_constructible.hpp64
-rw-r--r--boost/type_traits/is_destructible.hpp60
-rw-r--r--boost/type_traits/is_empty.hpp38
-rw-r--r--boost/type_traits/is_enum.hpp56
-rw-r--r--boost/type_traits/is_final.hpp23
-rw-r--r--boost/type_traits/is_float.hpp11
-rw-r--r--[-rwxr-xr-x]boost/type_traits/is_floating_point.hpp21
-rw-r--r--boost/type_traits/is_function.hpp21
-rw-r--r--boost/type_traits/is_fundamental.hpp23
-rw-r--r--boost/type_traits/is_integral.hpp75
-rw-r--r--boost/type_traits/is_lvalue_reference.hpp20
-rw-r--r--boost/type_traits/is_member_function_pointer.hpp43
-rw-r--r--[-rwxr-xr-x]boost/type_traits/is_member_object_pointer.hpp28
-rw-r--r--boost/type_traits/is_member_pointer.hpp34
-rw-r--r--boost/type_traits/is_nothrow_move_assignable.hpp77
-rw-r--r--boost/type_traits/is_nothrow_move_constructible.hpp99
-rw-r--r--boost/type_traits/is_object.hpp31
-rw-r--r--boost/type_traits/is_pod.hpp49
-rw-r--r--boost/type_traits/is_pointer.hpp65
-rw-r--r--boost/type_traits/is_polymorphic.hpp19
-rw-r--r--boost/type_traits/is_reference.hpp27
-rw-r--r--boost/type_traits/is_rvalue_reference.hpp12
-rw-r--r--boost/type_traits/is_same.hpp12
-rw-r--r--boost/type_traits/is_scalar.hpp34
-rw-r--r--boost/type_traits/is_signed.hpp139
-rw-r--r--boost/type_traits/is_stateless.hpp31
-rw-r--r--boost/type_traits/is_union.hpp38
-rw-r--r--boost/type_traits/is_unsigned.hpp142
-rw-r--r--boost/type_traits/is_virtual_base_of.hpp24
-rw-r--r--boost/type_traits/is_void.hpp26
-rw-r--r--boost/type_traits/is_volatile.hpp59
-rw-r--r--boost/type_traits/make_signed.hpp90
-rw-r--r--boost/type_traits/make_unsigned.hpp89
-rw-r--r--boost/type_traits/promote.hpp22
-rw-r--r--boost/type_traits/rank.hpp9
-rw-r--r--boost/type_traits/remove_all_extents.hpp23
-rw-r--r--boost/type_traits/remove_bounds.hpp27
-rw-r--r--boost/type_traits/remove_const.hpp62
-rw-r--r--boost/type_traits/remove_cv.hpp49
-rw-r--r--boost/type_traits/remove_extent.hpp23
-rw-r--r--boost/type_traits/remove_pointer.hpp18
-rw-r--r--boost/type_traits/remove_reference.hpp15
-rw-r--r--boost/type_traits/remove_volatile.hpp57
-rw-r--r--boost/type_traits/transform_traits_spec.hpp14
-rw-r--r--boost/type_traits/type_identity.hpp22
-rw-r--r--boost/type_traits/type_with_alignment.hpp276
-rw-r--r--boost/utility/declval.hpp33
-rw-r--r--boost/utility/string_ref.hpp6
-rw-r--r--boost/uuid/detail/config.hpp22
-rw-r--r--boost/uuid/detail/uuid_x86.hpp30
-rw-r--r--boost/uuid/seed_rng.hpp5
-rw-r--r--boost/variant/detail/bool_trait_def.hpp30
-rw-r--r--boost/variant/detail/bool_trait_undef.hpp21
-rw-r--r--boost/variant/variant.hpp5
-rw-r--r--boost/version.hpp4
-rw-r--r--boost/vmd/array.hpp18
-rw-r--r--boost/vmd/array/to_seq.hpp49
-rw-r--r--boost/vmd/array/to_tuple.hpp49
-rw-r--r--boost/vmd/assert.hpp58
-rw-r--r--boost/vmd/assert_is_array.hpp113
-rw-r--r--boost/vmd/assert_is_empty.hpp105
-rw-r--r--boost/vmd/assert_is_identifier.hpp158
-rw-r--r--boost/vmd/assert_is_list.hpp113
-rw-r--r--boost/vmd/assert_is_number.hpp73
-rw-r--r--boost/vmd/assert_is_seq.hpp113
-rw-r--r--boost/vmd/assert_is_tuple.hpp73
-rw-r--r--boost/vmd/assert_is_type.hpp113
-rw-r--r--boost/vmd/detail/adjust_tuple_type.hpp97
-rw-r--r--boost/vmd/detail/array.hpp189
-rw-r--r--boost/vmd/detail/assert.hpp69
-rw-r--r--boost/vmd/detail/data_equal.hpp202
-rw-r--r--boost/vmd/detail/data_equal_common.hpp409
-rw-r--r--boost/vmd/detail/empty_result.hpp12
-rw-r--r--boost/vmd/detail/equal.hpp562
-rw-r--r--boost/vmd/detail/equal_common.hpp153
-rw-r--r--boost/vmd/detail/equal_type.hpp21
-rw-r--r--boost/vmd/detail/identifier.hpp429
-rw-r--r--boost/vmd/detail/identifier_concat.hpp21
-rw-r--r--boost/vmd/detail/identifier_type.hpp118
-rw-r--r--boost/vmd/detail/idprefix.hpp14
-rw-r--r--boost/vmd/detail/is_array.hpp41
-rw-r--r--boost/vmd/detail/is_array_common.hpp248
-rw-r--r--boost/vmd/detail/is_empty.hpp61
-rw-r--r--boost/vmd/detail/is_empty_array.hpp20
-rw-r--r--boost/vmd/detail/is_empty_tuple.hpp74
-rw-r--r--boost/vmd/detail/is_entire.hpp23
-rw-r--r--boost/vmd/detail/is_identifier.hpp96
-rw-r--r--boost/vmd/detail/is_list.hpp207
-rw-r--r--boost/vmd/detail/is_number.hpp38
-rw-r--r--boost/vmd/detail/is_seq.hpp27
-rw-r--r--boost/vmd/detail/is_tuple.hpp20
-rw-r--r--boost/vmd/detail/is_type.hpp57
-rw-r--r--boost/vmd/detail/is_type_type.hpp25
-rw-r--r--boost/vmd/detail/list.hpp212
-rw-r--r--boost/vmd/detail/match_identifier.hpp160
-rw-r--r--boost/vmd/detail/match_identifier_common.hpp37
-rw-r--r--boost/vmd/detail/match_single_identifier.hpp16
-rw-r--r--boost/vmd/detail/modifiers.hpp104
-rw-r--r--boost/vmd/detail/mods.hpp707
-rw-r--r--boost/vmd/detail/nil_registration.hpp13
-rw-r--r--boost/vmd/detail/not_empty.hpp20
-rw-r--r--boost/vmd/detail/number_registration.hpp784
-rw-r--r--boost/vmd/detail/only_after.hpp37
-rw-r--r--boost/vmd/detail/parens.hpp54
-rw-r--r--boost/vmd/detail/parens_common.hpp21
-rw-r--r--boost/vmd/detail/parens_split.hpp24
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_1.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_10.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_11.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_12.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_13.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_14.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_15.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_16.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_2.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_3.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_4.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_5.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_6.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_7.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_8.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_9.hpp185
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp22
-rw-r--r--boost/vmd/detail/recurse/data_equal/data_equal_specific.hpp185
-rw-r--r--boost/vmd/detail/recurse/equal/equal_1.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_10.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_11.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_12.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_13.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_14.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_15.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_16.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_2.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_3.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_4.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_5.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_6.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_7.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_8.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_9.hpp282
-rw-r--r--boost/vmd/detail/recurse/equal/equal_headers.hpp23
-rw-r--r--boost/vmd/detail/seq.hpp236
-rw-r--r--boost/vmd/detail/sequence_arity.hpp66
-rw-r--r--boost/vmd/detail/sequence_common.hpp766
-rw-r--r--boost/vmd/detail/sequence_elem.hpp985
-rw-r--r--boost/vmd/detail/sequence_enum.hpp40
-rw-r--r--boost/vmd/detail/sequence_size.hpp21
-rw-r--r--boost/vmd/detail/sequence_to_array.hpp47
-rw-r--r--boost/vmd/detail/sequence_to_list.hpp47
-rw-r--r--boost/vmd/detail/sequence_to_seq.hpp45
-rw-r--r--boost/vmd/detail/sequence_to_tuple.hpp45
-rw-r--r--boost/vmd/detail/sequence_type.hpp274
-rw-r--r--boost/vmd/detail/setup.hpp41
-rw-r--r--boost/vmd/detail/tuple.hpp196
-rw-r--r--boost/vmd/detail/type_registration.hpp43
-rw-r--r--boost/vmd/detail/variadic_pop_front.hpp24
-rw-r--r--boost/vmd/elem.hpp292
-rw-r--r--boost/vmd/empty.hpp41
-rw-r--r--boost/vmd/enum.hpp103
-rw-r--r--boost/vmd/equal.hpp89
-rw-r--r--boost/vmd/get_type.hpp123
-rw-r--r--boost/vmd/identity.hpp76
-rw-r--r--boost/vmd/is_array.hpp73
-rw-r--r--boost/vmd/is_empty.hpp95
-rw-r--r--boost/vmd/is_empty_array.hpp98
-rw-r--r--boost/vmd/is_empty_list.hpp73
-rw-r--r--boost/vmd/is_identifier.hpp117
-rw-r--r--boost/vmd/is_list.hpp73
-rw-r--r--boost/vmd/is_multi.hpp67
-rw-r--r--boost/vmd/is_number.hpp52
-rw-r--r--boost/vmd/is_parens_empty.hpp73
-rw-r--r--boost/vmd/is_seq.hpp71
-rw-r--r--boost/vmd/is_tuple.hpp45
-rw-r--r--boost/vmd/is_type.hpp73
-rw-r--r--boost/vmd/is_unary.hpp67
-rw-r--r--boost/vmd/list.hpp18
-rw-r--r--boost/vmd/list/to_seq.hpp49
-rw-r--r--boost/vmd/list/to_tuple.hpp49
-rw-r--r--boost/vmd/not_equal.hpp94
-rw-r--r--boost/vmd/seq.hpp26
-rw-r--r--boost/vmd/seq/is_vmd_seq.hpp56
-rw-r--r--boost/vmd/seq/pop_back.hpp51
-rw-r--r--boost/vmd/seq/pop_front.hpp51
-rw-r--r--boost/vmd/seq/push_back.hpp53
-rw-r--r--boost/vmd/seq/push_front.hpp53
-rw-r--r--boost/vmd/seq/remove.hpp57
-rw-r--r--boost/vmd/seq/size.hpp52
-rw-r--r--boost/vmd/seq/to_array.hpp52
-rw-r--r--boost/vmd/seq/to_list.hpp65
-rw-r--r--boost/vmd/seq/to_tuple.hpp49
-rw-r--r--boost/vmd/size.hpp57
-rw-r--r--boost/vmd/to_array.hpp101
-rw-r--r--boost/vmd/to_list.hpp101
-rw-r--r--boost/vmd/to_seq.hpp101
-rw-r--r--boost/vmd/to_tuple.hpp101
-rw-r--r--boost/vmd/tuple.hpp26
-rw-r--r--boost/vmd/tuple/is_vmd_tuple.hpp56
-rw-r--r--boost/vmd/tuple/pop_back.hpp73
-rw-r--r--boost/vmd/tuple/pop_front.hpp73
-rw-r--r--boost/vmd/tuple/push_back.hpp53
-rw-r--r--boost/vmd/tuple/push_front.hpp53
-rw-r--r--boost/vmd/tuple/remove.hpp84
-rw-r--r--boost/vmd/tuple/size.hpp52
-rw-r--r--boost/vmd/tuple/to_array.hpp52
-rw-r--r--boost/vmd/tuple/to_list.hpp52
-rw-r--r--boost/vmd/tuple/to_seq.hpp49
-rw-r--r--boost/vmd/vmd.hpp54
1492 files changed, 62037 insertions, 25615 deletions
diff --git a/boost/align.hpp b/boost/align.hpp
index 0b3221dffc..ce8f78d343 100644
--- a/boost/align.hpp
+++ b/boost/align.hpp
@@ -1,6 +1,6 @@
/*
(c) 2014-2015 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
diff --git a/boost/align/align.hpp b/boost/align/align.hpp
index b95d673bcd..648a65e295 100644
--- a/boost/align/align.hpp
+++ b/boost/align/align.hpp
@@ -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.
diff --git a/boost/align/aligned_alloc.hpp b/boost/align/aligned_alloc.hpp
index 0e3ba60641..b70f4bc632 100644
--- a/boost/align/aligned_alloc.hpp
+++ b/boost/align/aligned_alloc.hpp
@@ -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.
diff --git a/boost/align/aligned_allocator.hpp b/boost/align/aligned_allocator.hpp
index a31dfe599f..9655e3dfb2 100644
--- a/boost/align/aligned_allocator.hpp
+++ b/boost/align/aligned_allocator.hpp
@@ -1,6 +1,6 @@
/*
-(c) 2014 Glen Joseph Fernandes
-glenjofe at gmail dot com
+(c) 2014-2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
@@ -17,8 +17,8 @@ http://boost.org/LICENSE_1_0.txt
#include <boost/align/alignment_of.hpp>
#include <boost/align/detail/addressof.hpp>
#include <boost/align/detail/is_alignment_constant.hpp>
-#include <boost/align/detail/max_align.hpp>
-#include <boost/align/detail/max_count_of.hpp>
+#include <boost/align/detail/max_objects.hpp>
+#include <boost/align/detail/max_size.hpp>
#include <new>
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
@@ -46,7 +46,7 @@ public:
private:
enum {
- min_align = detail::max_align<Alignment,
+ min_align = detail::max_size<Alignment,
alignment_of<value_type>::value>::value
};
@@ -57,7 +57,7 @@ public:
};
#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
- aligned_allocator() BOOST_NOEXCEPT = default;
+ aligned_allocator() = default;
#else
aligned_allocator() BOOST_NOEXCEPT {
}
@@ -79,18 +79,18 @@ public:
pointer allocate(size_type size, const_void_pointer = 0) {
void* p = aligned_alloc(min_align, sizeof(T) * size);
- if (!p && size > 0) {
- boost::throw_exception(std::bad_alloc());
+ if (size > 0 && !p) {
+ ::boost::throw_exception(std::bad_alloc());
}
return static_cast<T*>(p);
}
void deallocate(pointer ptr, size_type) {
- alignment::aligned_free(ptr);
+ ::boost::alignment::aligned_free(ptr);
}
BOOST_CONSTEXPR size_type max_size() const BOOST_NOEXCEPT {
- return detail::max_count_of<T>::value;
+ return detail::max_objects<T>::value;
}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
@@ -160,7 +160,7 @@ inline bool operator!=(const aligned_allocator<T1,
return false;
}
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/aligned_allocator_adaptor.hpp b/boost/align/aligned_allocator_adaptor.hpp
index ac77b4ab9e..19777173f1 100644
--- a/boost/align/aligned_allocator_adaptor.hpp
+++ b/boost/align/aligned_allocator_adaptor.hpp
@@ -1,6 +1,6 @@
/*
(c) 2014-2015 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
@@ -17,6 +17,7 @@ http://boost.org/LICENSE_1_0.txt
#include <boost/align/detail/addressof.hpp>
#include <boost/align/detail/is_alignment_constant.hpp>
#include <boost/align/detail/max_align.hpp>
+#include <boost/align/detail/max_size.hpp>
#include <new>
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
@@ -74,9 +75,8 @@ public:
private:
enum {
- min_align = detail::max_align<Alignment,
- detail::max_align<alignment_of<value_type>::value,
- alignment_of<char_ptr>::value>::value>::value
+ min_align = detail::max_size<Alignment,
+ detail::max_align<value_type, char_ptr>::value>::value
};
public:
@@ -184,7 +184,7 @@ inline bool operator!=(const aligned_allocator_adaptor<A1,
return !(a == b);
}
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/aligned_allocator_adaptor_forward.hpp b/boost/align/aligned_allocator_adaptor_forward.hpp
index 327d7edbf9..d606f09920 100644
--- a/boost/align/aligned_allocator_adaptor_forward.hpp
+++ b/boost/align/aligned_allocator_adaptor_forward.hpp
@@ -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,7 +17,7 @@ namespace alignment {
template<class Allocator, std::size_t Alignment = 1>
class aligned_allocator_adaptor;
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/aligned_allocator_forward.hpp b/boost/align/aligned_allocator_forward.hpp
index 9a3f3635db..41f917f38c 100644
--- a/boost/align/aligned_allocator_forward.hpp
+++ b/boost/align/aligned_allocator_forward.hpp
@@ -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,7 +17,7 @@ namespace alignment {
template<class T, std::size_t Alignment = 1>
class aligned_allocator;
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/aligned_delete.hpp b/boost/align/aligned_delete.hpp
index 6d8caed302..c8ad64e4da 100644
--- a/boost/align/aligned_delete.hpp
+++ b/boost/align/aligned_delete.hpp
@@ -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.
@@ -23,12 +23,12 @@ public:
BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(ptr->~T())) {
if (ptr) {
ptr->~T();
- alignment::aligned_free(ptr);
+ ::boost::alignment::aligned_free(ptr);
}
}
};
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/aligned_delete_forward.hpp b/boost/align/aligned_delete_forward.hpp
index 530e0970d3..375e576cb5 100644
--- a/boost/align/aligned_delete_forward.hpp
+++ b/boost/align/aligned_delete_forward.hpp
@@ -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.
@@ -14,7 +14,7 @@ namespace alignment {
class aligned_delete;
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/alignment_of.hpp b/boost/align/alignment_of.hpp
index 06d22a0259..2531ced105 100644
--- a/boost/align/alignment_of.hpp
+++ b/boost/align/alignment_of.hpp
@@ -1,6 +1,6 @@
/*
(c) 2014-2015 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
@@ -47,7 +47,7 @@ struct alignment_of
type>::type>::type>::type {
};
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/alignment_of_forward.hpp b/boost/align/alignment_of_forward.hpp
index 778a9f73b8..7ab227528b 100644
--- a/boost/align/alignment_of_forward.hpp
+++ b/boost/align/alignment_of_forward.hpp
@@ -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.
@@ -15,7 +15,7 @@ namespace alignment {
template<class T>
struct alignment_of;
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/assume_aligned.hpp b/boost/align/assume_aligned.hpp
index 8d730e6d79..8d9f6ccf43 100644
--- a/boost/align/assume_aligned.hpp
+++ b/boost/align/assume_aligned.hpp
@@ -3,7 +3,7 @@
(c) 2015 LRI UMR 8623 CNRS/University Paris Sud XI
(c) 2015 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 @@ http://boost.org/LICENSE_1_0.txt
#if defined(BOOST_MSVC)
#include <boost/align/detail/assume_aligned_msvc.hpp>
-#elif defined(BOOST_CLANG)
+#elif defined(BOOST_CLANG) && defined(__has_builtin)
#include <boost/align/detail/assume_aligned_clang.hpp>
#elif BOOST_GCC_VERSION >= 40700
#include <boost/align/detail/assume_aligned_gcc.hpp>
diff --git a/boost/align/detail/address.hpp b/boost/align/detail/address.hpp
index 63be1a95d0..b38e571534 100644
--- a/boost/align/detail/address.hpp
+++ b/boost/align/detail/address.hpp
@@ -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
diff --git a/boost/align/detail/addressof.hpp b/boost/align/detail/addressof.hpp
index 8f0c88204e..50731a70d0 100644
--- a/boost/align/detail/addressof.hpp
+++ b/boost/align/detail/addressof.hpp
@@ -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.
@@ -27,8 +27,8 @@ using std::addressof;
using boost::addressof;
#endif
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/align.hpp b/boost/align/detail/align.hpp
index 00be6fd6aa..d2404b3e6d 100644
--- a/boost/align/detail/align.hpp
+++ b/boost/align/detail/align.hpp
@@ -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
diff --git a/boost/align/detail/align_cxx11.hpp b/boost/align/detail/align_cxx11.hpp
index 80dc7e36a4..a95b84c70f 100644
--- a/boost/align/detail/align_cxx11.hpp
+++ b/boost/align/detail/align_cxx11.hpp
@@ -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
diff --git a/boost/align/detail/aligned_alloc.hpp b/boost/align/detail/aligned_alloc.hpp
index 1852ac15a6..28c0d2938e 100644
--- a/boost/align/detail/aligned_alloc.hpp
+++ b/boost/align/detail/aligned_alloc.hpp
@@ -1,6 +1,6 @@
/*
(c) 2014-2015 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
@@ -48,7 +48,7 @@ inline void aligned_free(void* ptr) BOOST_NOEXCEPT
}
}
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/aligned_alloc_android.hpp b/boost/align/detail/aligned_alloc_android.hpp
index d97d67989e..2381d8be9c 100644
--- a/boost/align/detail/aligned_alloc_android.hpp
+++ b/boost/align/detail/aligned_alloc_android.hpp
@@ -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.
@@ -30,7 +30,7 @@ inline void aligned_free(void* ptr) BOOST_NOEXCEPT
::free(ptr);
}
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/aligned_alloc_macos.hpp b/boost/align/detail/aligned_alloc_macos.hpp
index 9b6d235133..da3270b084 100644
--- a/boost/align/detail/aligned_alloc_macos.hpp
+++ b/boost/align/detail/aligned_alloc_macos.hpp
@@ -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,7 +22,7 @@ inline void* aligned_alloc(std::size_t alignment, std::size_t size)
BOOST_NOEXCEPT
{
BOOST_ASSERT(detail::is_alignment(alignment));
- if (!size) {
+ if (size == 0) {
return 0;
}
if (alignment < sizeof(void*)) {
@@ -40,7 +40,7 @@ inline void aligned_free(void* ptr) BOOST_NOEXCEPT
::free(ptr);
}
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/aligned_alloc_msvc.hpp b/boost/align/detail/aligned_alloc_msvc.hpp
index 1cb7f2a3a1..92f4291893 100644
--- a/boost/align/detail/aligned_alloc_msvc.hpp
+++ b/boost/align/detail/aligned_alloc_msvc.hpp
@@ -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.
@@ -30,7 +30,7 @@ inline void aligned_free(void* ptr) BOOST_NOEXCEPT
::_aligned_free(ptr);
}
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/aligned_alloc_posix.hpp b/boost/align/detail/aligned_alloc_posix.hpp
index 3743652cbd..df64d75da3 100644
--- a/boost/align/detail/aligned_alloc_posix.hpp
+++ b/boost/align/detail/aligned_alloc_posix.hpp
@@ -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.
@@ -37,7 +37,7 @@ inline void aligned_free(void* ptr) BOOST_NOEXCEPT
::free(ptr);
}
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/aligned_alloc_sunos.hpp b/boost/align/detail/aligned_alloc_sunos.hpp
index c5778cdd75..0114597bad 100644
--- a/boost/align/detail/aligned_alloc_sunos.hpp
+++ b/boost/align/detail/aligned_alloc_sunos.hpp
@@ -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.
@@ -30,7 +30,7 @@ inline void aligned_free(void* ptr) BOOST_NOEXCEPT
::free(ptr);
}
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/alignment_of.hpp b/boost/align/detail/alignment_of.hpp
index b1d2d56920..2a630e9784 100644
--- a/boost/align/detail/alignment_of.hpp
+++ b/boost/align/detail/alignment_of.hpp
@@ -1,6 +1,6 @@
/*
-(c) 2014 Glen Joseph Fernandes
-glenjofe at gmail dot com
+(c) 2014-2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
@@ -10,20 +10,25 @@ http://boost.org/LICENSE_1_0.txt
#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_HPP
#include <boost/align/detail/min_size.hpp>
-#include <boost/align/detail/offset_object.hpp>
namespace boost {
namespace alignment {
namespace detail {
template<class T>
+struct alignof_helper {
+ char value;
+ T object;
+};
+
+template<class T>
struct alignment_of
: min_size<sizeof(T),
- sizeof(offset_object<T>) - sizeof(T)>::type {
+ sizeof(alignof_helper<T>) - sizeof(T)>::type {
};
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/alignment_of_clang.hpp b/boost/align/detail/alignment_of_clang.hpp
index fa96a37d9d..a8e2a349d6 100644
--- a/boost/align/detail/alignment_of_clang.hpp
+++ b/boost/align/detail/alignment_of_clang.hpp
@@ -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,8 +21,8 @@ struct alignment_of
: integral_constant<std::size_t, __alignof(T)> {
};
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/alignment_of_codegear.hpp b/boost/align/detail/alignment_of_codegear.hpp
index e8986cef66..8875e6c424 100644
--- a/boost/align/detail/alignment_of_codegear.hpp
+++ b/boost/align/detail/alignment_of_codegear.hpp
@@ -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,8 +21,8 @@ struct alignment_of
: integral_constant<std::size_t, alignof(T)> {
};
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/alignment_of_cxx11.hpp b/boost/align/detail/alignment_of_cxx11.hpp
index 0f66098b67..cbe2d9e7a8 100644
--- a/boost/align/detail/alignment_of_cxx11.hpp
+++ b/boost/align/detail/alignment_of_cxx11.hpp
@@ -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,8 +17,8 @@ namespace detail {
using std::alignment_of;
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/alignment_of_gcc.hpp b/boost/align/detail/alignment_of_gcc.hpp
index 615968b477..0812fde8e4 100644
--- a/boost/align/detail/alignment_of_gcc.hpp
+++ b/boost/align/detail/alignment_of_gcc.hpp
@@ -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,8 +21,8 @@ struct alignment_of
: integral_constant<std::size_t, __alignof__(T)> {
};
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/alignment_of_msvc.hpp b/boost/align/detail/alignment_of_msvc.hpp
index 87d6ac8e28..df6912f411 100644
--- a/boost/align/detail/alignment_of_msvc.hpp
+++ b/boost/align/detail/alignment_of_msvc.hpp
@@ -1,6 +1,6 @@
/*
-(c) 2014 Glen Joseph Fernandes
-glenjofe at gmail dot com
+(c) 2014-2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
@@ -10,19 +10,26 @@ http://boost.org/LICENSE_1_0.txt
#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_MSVC_HPP
#include <boost/align/detail/min_size.hpp>
-#include <boost/align/detail/offset_object.hpp>
namespace boost {
namespace alignment {
namespace detail {
template<class T>
+struct alignof_helper {
+ T first;
+ char value;
+ T second;
+};
+
+template<class T>
struct alignment_of
- : min_size<sizeof(T), offsetof(offset_object<T>, object)>::type {
+ : min_size<sizeof(T),
+ sizeof(alignof_helper<T>) - (sizeof(T) << 1)>::type {
};
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/assume_aligned.hpp b/boost/align/detail/assume_aligned.hpp
index 0ecefa1dd0..cf77086624 100644
--- a/boost/align/detail/assume_aligned.hpp
+++ b/boost/align/detail/assume_aligned.hpp
@@ -3,7 +3,7 @@
(c) 2015 LRI UMR 8623 CNRS/University Paris Sud XI
(c) 2015 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
diff --git a/boost/align/detail/assume_aligned_clang.hpp b/boost/align/detail/assume_aligned_clang.hpp
index d72b4cae86..2ba41c6970 100644
--- a/boost/align/detail/assume_aligned_clang.hpp
+++ b/boost/align/detail/assume_aligned_clang.hpp
@@ -1,6 +1,6 @@
/*
(c) 2015 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
@@ -9,11 +9,9 @@ http://boost.org/LICENSE_1_0.txt
#ifndef BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_CLANG_HPP
#define BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_CLANG_HPP
-#include <stdint.h>
-
-#if defined(__has_builtin) && __has_builtin(__builtin_assume)
+#if __has_builtin(__builtin_assume_aligned)
#define BOOST_ALIGN_ASSUME_ALIGNED(ptr, alignment) \
-__builtin_assume((uintptr_t(ptr) & ((alignment) - 1)) == 0)
+(ptr) = __builtin_assume_aligned((ptr), (alignment))
#else
#define BOOST_ALIGN_ASSUME_ALIGNED(ptr, alignment)
#endif
diff --git a/boost/align/detail/assume_aligned_gcc.hpp b/boost/align/detail/assume_aligned_gcc.hpp
index a1e6cb0280..f7a545851c 100644
--- a/boost/align/detail/assume_aligned_gcc.hpp
+++ b/boost/align/detail/assume_aligned_gcc.hpp
@@ -3,7 +3,7 @@
(c) 2015 LRI UMR 8623 CNRS/University Paris Sud XI
(c) 2015 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
diff --git a/boost/align/detail/assume_aligned_intel.hpp b/boost/align/detail/assume_aligned_intel.hpp
index aaaf331802..e9ec2dbeb4 100644
--- a/boost/align/detail/assume_aligned_intel.hpp
+++ b/boost/align/detail/assume_aligned_intel.hpp
@@ -3,7 +3,7 @@
(c) 2015 LRI UMR 8623 CNRS/University Paris Sud XI
(c) 2015 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
diff --git a/boost/align/detail/assume_aligned_msvc.hpp b/boost/align/detail/assume_aligned_msvc.hpp
index fdad429b08..97c1fb1add 100644
--- a/boost/align/detail/assume_aligned_msvc.hpp
+++ b/boost/align/detail/assume_aligned_msvc.hpp
@@ -3,7 +3,7 @@
(c) 2015 LRI UMR 8623 CNRS/University Paris Sud XI
(c) 2015 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
diff --git a/boost/align/detail/integral_constant.hpp b/boost/align/detail/integral_constant.hpp
index 6116fea5f5..3f8bf0a8d9 100644
--- a/boost/align/detail/integral_constant.hpp
+++ b/boost/align/detail/integral_constant.hpp
@@ -1,6 +1,6 @@
/*
-(c) 2014 Glen Joseph Fernandes
-glenjofe at gmail dot com
+(c) 2014-2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
@@ -25,24 +25,18 @@ using std::integral_constant;
template<class T, T Value>
struct integral_constant {
typedef T value_type;
- typedef integral_constant<T, Value> type;
+ typedef integral_constant type;
-#if !defined(BOOST_NO_CXX11_CONSTEXPR)
- constexpr operator value_type() const {
+ BOOST_CONSTEXPR operator value_type() const {
return Value;
}
- static constexpr T value = Value;
-#else
- enum {
- value = Value
- };
-#endif
+ static BOOST_CONSTEXPR_OR_CONST T value = Value;
};
#endif
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/is_aligned.hpp b/boost/align/detail/is_aligned.hpp
index a861e9f4c8..cb45be3433 100644
--- a/boost/align/detail/is_aligned.hpp
+++ b/boost/align/detail/is_aligned.hpp
@@ -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,10 +22,10 @@ inline bool is_aligned(std::size_t alignment, const void* ptr)
BOOST_NOEXCEPT
{
BOOST_ASSERT(detail::is_alignment(alignment));
- return (detail::address_t(ptr) & (alignment - 1)) == 0;
+ return (detail::address(ptr) & (alignment - 1)) == 0;
}
-} /* :alignment */
-} /* :boost */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/is_alignment.hpp b/boost/align/detail/is_alignment.hpp
index 7ac0bb3d12..12d8df974f 100644
--- a/boost/align/detail/is_alignment.hpp
+++ b/boost/align/detail/is_alignment.hpp
@@ -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/boost/align/detail/is_alignment_constant.hpp b/boost/align/detail/is_alignment_constant.hpp
index 4c703cafc0..2c29343b2d 100644
--- a/boost/align/detail/is_alignment_constant.hpp
+++ b/boost/align/detail/is_alignment_constant.hpp
@@ -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,8 +21,8 @@ struct is_alignment_constant
: integral_constant<bool, (N > 0) && ((N & (N - 1)) == 0)> {
};
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/max_align.hpp b/boost/align/detail/max_align.hpp
index 4351a5a2ed..daa0413935 100644
--- a/boost/align/detail/max_align.hpp
+++ b/boost/align/detail/max_align.hpp
@@ -1,6 +1,6 @@
/*
-(c) 2014 Glen Joseph Fernandes
-glenjofe at gmail dot com
+(c) 2014-2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
@@ -9,20 +9,21 @@ http://boost.org/LICENSE_1_0.txt
#ifndef BOOST_ALIGN_DETAIL_MAX_ALIGN_HPP
#define BOOST_ALIGN_DETAIL_MAX_ALIGN_HPP
-#include <boost/align/detail/integral_constant.hpp>
+#include <boost/align/detail/max_size.hpp>
+#include <boost/align/alignment_of.hpp>
#include <cstddef>
namespace boost {
namespace alignment {
namespace detail {
-template<std::size_t A, std::size_t B>
+template<class A, class B>
struct max_align
- : integral_constant<std::size_t, (A > B) ? A : B> {
+ : max_size<alignment_of<A>::value, alignment_of<B>::value>::type {
};
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/max_count_of.hpp b/boost/align/detail/max_objects.hpp
index e0ae3bce96..eb56d6fe66 100644
--- a/boost/align/detail/max_count_of.hpp
+++ b/boost/align/detail/max_objects.hpp
@@ -1,13 +1,13 @@
/*
(c) 2014 Glen Joseph Fernandes
-glenjofe at gmail dot com
+<glenjofe -at- gmail.com>
Distributed under the Boost Software
License, Version 1.0.
http://boost.org/LICENSE_1_0.txt
*/
-#ifndef BOOST_ALIGN_DETAIL_MAX_COUNT_OF_HPP
-#define BOOST_ALIGN_DETAIL_MAX_COUNT_OF_HPP
+#ifndef BOOST_ALIGN_DETAIL_MAX_OBJECTS_HPP
+#define BOOST_ALIGN_DETAIL_MAX_OBJECTS_HPP
#include <boost/align/detail/integral_constant.hpp>
#include <cstddef>
@@ -17,13 +17,13 @@ namespace alignment {
namespace detail {
template<class T>
-struct max_count_of
+struct max_objects
: integral_constant<std::size_t,
~static_cast<std::size_t>(0) / sizeof(T)> {
};
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/max_size.hpp b/boost/align/detail/max_size.hpp
new file mode 100644
index 0000000000..48fc45e2ee
--- /dev/null
+++ b/boost/align/detail/max_size.hpp
@@ -0,0 +1,28 @@
+/*
+(c) 2014-2015 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_DETAIL_MAX_SIZE_HPP
+#define BOOST_ALIGN_DETAIL_MAX_SIZE_HPP
+
+#include <boost/align/detail/integral_constant.hpp>
+#include <cstddef>
+
+namespace boost {
+namespace alignment {
+namespace detail {
+
+template<std::size_t A, std::size_t B>
+struct max_size
+ : integral_constant<std::size_t, (A > B) ? A : B> {
+};
+
+} /* .detail */
+} /* .alignment */
+} /* .boost */
+
+#endif
diff --git a/boost/align/detail/min_size.hpp b/boost/align/detail/min_size.hpp
index 71afe8c686..8ed3e87ab6 100644
--- a/boost/align/detail/min_size.hpp
+++ b/boost/align/detail/min_size.hpp
@@ -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,8 +21,8 @@ struct min_size
: integral_constant<std::size_t, (A < B) ? A : B> {
};
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/detail/offset_object.hpp b/boost/align/detail/offset_object.hpp
deleted file mode 100644
index 2055edfb4a..0000000000
--- a/boost/align/detail/offset_object.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-(c) 2014 Glen Joseph Fernandes
-glenjofe at gmail dot com
-
-Distributed under the Boost Software
-License, Version 1.0.
-http://boost.org/LICENSE_1_0.txt
-*/
-#ifndef BOOST_ALIGN_DETAIL_OFFSET_OBJECT_HPP
-#define BOOST_ALIGN_DETAIL_OFFSET_OBJECT_HPP
-
-namespace boost {
-namespace alignment {
-namespace detail {
-
-template<class T>
-struct offset_object {
- char offset;
- T object;
-};
-
-} /* :detail */
-} /* :alignment */
-} /* :boost */
-
-#endif
diff --git a/boost/align/detail/remove_traits.hpp b/boost/align/detail/remove_traits.hpp
index f59d6bf9e8..86a98d459a 100644
--- a/boost/align/detail/remove_traits.hpp
+++ b/boost/align/detail/remove_traits.hpp
@@ -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.
@@ -85,8 +85,8 @@ struct remove_cv {
};
#endif
-} /* :detail */
-} /* :alignment */
-} /* :boost */
+} /* .detail */
+} /* .alignment */
+} /* .boost */
#endif
diff --git a/boost/align/is_aligned.hpp b/boost/align/is_aligned.hpp
index 7473864ca7..5d99847e4a 100644
--- a/boost/align/is_aligned.hpp
+++ b/boost/align/is_aligned.hpp
@@ -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.
diff --git a/boost/aligned_storage.hpp b/boost/aligned_storage.hpp
index b5455f00b6..f400fa9e75 100644
--- a/boost/aligned_storage.hpp
+++ b/boost/aligned_storage.hpp
@@ -13,131 +13,6 @@
#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"
+#include <boost/type_traits/aligned_storage.hpp>
#endif // BOOST_ALIGNED_STORAGE_HPP
diff --git a/boost/archive/archive_exception.hpp b/boost/archive/archive_exception.hpp
index 1159d27755..fabcdb5fa7 100644
--- a/boost/archive/archive_exception.hpp
+++ b/boost/archive/archive_exception.hpp
@@ -87,6 +87,7 @@ public:
const char * e1 = NULL,
const char * e2 = NULL
) BOOST_NOEXCEPT;
+ BOOST_ARCHIVE_DECL archive_exception(archive_exception const &) BOOST_NOEXCEPT ;
virtual BOOST_ARCHIVE_DECL ~archive_exception() BOOST_NOEXCEPT_OR_NOTHROW ;
virtual BOOST_ARCHIVE_DECL const char * what() const BOOST_NOEXCEPT_OR_NOTHROW ;
};
diff --git a/boost/archive/basic_binary_oprimitive.hpp b/boost/archive/basic_binary_oprimitive.hpp
index 077d705ef1..f2ea6aa3ea 100644
--- a/boost/archive/basic_binary_oprimitive.hpp
+++ b/boost/archive/basic_binary_oprimitive.hpp
@@ -149,9 +149,7 @@ basic_binary_oprimitive<Archive, Elem, Tr>::save_binary(
const void *address,
std::size_t count
){
- //BOOST_ASSERT(
- // static_cast<std::size_t>((std::numeric_limits<std::streamsize>::max)()) >= count
- //);
+ // BOOST_ASSERT(count <= std::size_t(boost::integer_traits<std::streamsize>::const_max));
// note: if the following assertions fail
// a likely cause is that the output stream is set to "text"
// mode where by cr characters recieve special treatment.
@@ -161,9 +159,7 @@ basic_binary_oprimitive<Archive, Elem, Tr>::save_binary(
// archive_exception(archive_exception::output_stream_error)
// );
// figure number of elements to output - round up
- count = ( count + sizeof(Elem) - 1)
- / sizeof(Elem);
- BOOST_ASSERT(count <= std::size_t(boost::integer_traits<std::streamsize>::const_max));
+ count = ( count + sizeof(Elem) - 1) / sizeof(Elem);
std::streamsize scount = m_sb.sputn(
static_cast<const Elem *>(address),
static_cast<std::streamsize>(count)
diff --git a/boost/archive/detail/basic_iarchive.hpp b/boost/archive/detail/basic_iarchive.hpp
index befd0c75f2..1f5a8bf63b 100644
--- a/boost/archive/detail/basic_iarchive.hpp
+++ b/boost/archive/detail/basic_iarchive.hpp
@@ -65,11 +65,7 @@ protected:
public:
// some msvc versions require that the following function be public
// otherwise it should really protected.
- // account for bogus gcc warning
- #if defined(__GNUC__)
- virtual
- #endif
- BOOST_ARCHIVE_DECL ~basic_iarchive();
+ virtual BOOST_ARCHIVE_DECL ~basic_iarchive();
// note: NOT part of the public API.
BOOST_ARCHIVE_DECL void next_object_pointer(void *t);
BOOST_ARCHIVE_DECL void register_basic_serializer(
diff --git a/boost/archive/detail/basic_iserializer.hpp b/boost/archive/detail/basic_iserializer.hpp
index 240f0bc06e..0d66674c34 100644
--- a/boost/archive/detail/basic_iserializer.hpp
+++ b/boost/archive/detail/basic_iserializer.hpp
@@ -51,11 +51,7 @@ protected:
explicit BOOST_ARCHIVE_DECL basic_iserializer(
const boost::serialization::extended_type_info & type
);
- // account for bogus gcc warning
- #if defined(__GNUC__)
- virtual
- #endif
- BOOST_ARCHIVE_DECL ~basic_iserializer();
+ virtual BOOST_ARCHIVE_DECL ~basic_iserializer();
public:
bool serialized_as_pointer() const {
return m_bpis != NULL;
diff --git a/boost/archive/detail/basic_oarchive.hpp b/boost/archive/detail/basic_oarchive.hpp
index 702c5604bc..c379108d58 100644
--- a/boost/archive/detail/basic_oarchive.hpp
+++ b/boost/archive/detail/basic_oarchive.hpp
@@ -61,14 +61,8 @@ class BOOST_SYMBOL_VISIBLE basic_oarchive :
protected:
BOOST_ARCHIVE_DECL basic_oarchive(unsigned int flags = 0);
BOOST_ARCHIVE_DECL boost::archive::detail::helper_collection &
- get_helper_collection(){
- return *this;
- }
- // account for bogus gcc warning
- #if defined(__GNUC__)
- virtual
- #endif
- BOOST_ARCHIVE_DECL ~basic_oarchive();
+ get_helper_collection();
+ virtual BOOST_ARCHIVE_DECL ~basic_oarchive();
public:
// note: NOT part of the public interface
BOOST_ARCHIVE_DECL void register_basic_serializer(
diff --git a/boost/archive/detail/basic_oserializer.hpp b/boost/archive/detail/basic_oserializer.hpp
index 7a710ba6bc..94247e9005 100644
--- a/boost/archive/detail/basic_oserializer.hpp
+++ b/boost/archive/detail/basic_oserializer.hpp
@@ -52,11 +52,7 @@ protected:
explicit BOOST_ARCHIVE_DECL basic_oserializer(
const boost::serialization::extended_type_info & type_
);
- // account for bogus gcc warning
- #if defined(__GNUC__)
- virtual
- #endif
- BOOST_ARCHIVE_DECL ~basic_oserializer();
+ virtual BOOST_ARCHIVE_DECL ~basic_oserializer();
public:
bool serialized_as_pointer() const {
return m_bpos != NULL;
diff --git a/boost/archive/detail/basic_pointer_iserializer.hpp b/boost/archive/detail/basic_pointer_iserializer.hpp
index 23b9f906dc..1fc4b14d6e 100644
--- a/boost/archive/detail/basic_pointer_iserializer.hpp
+++ b/boost/archive/detail/basic_pointer_iserializer.hpp
@@ -46,11 +46,7 @@ protected:
explicit BOOST_ARCHIVE_DECL basic_pointer_iserializer(
const boost::serialization::extended_type_info & type_
);
- // account for bogus gcc warning
- #if defined(__GNUC__)
- virtual
- #endif
- BOOST_ARCHIVE_DECL ~basic_pointer_iserializer();
+ virtual BOOST_ARCHIVE_DECL ~basic_pointer_iserializer();
public:
virtual void * heap_allocation() const = 0;
virtual const basic_iserializer & get_basic_serializer() const = 0;
diff --git a/boost/archive/detail/basic_pointer_oserializer.hpp b/boost/archive/detail/basic_pointer_oserializer.hpp
index 868e2fa580..1a5d9549ea 100644
--- a/boost/archive/detail/basic_pointer_oserializer.hpp
+++ b/boost/archive/detail/basic_pointer_oserializer.hpp
@@ -47,11 +47,7 @@ protected:
const boost::serialization::extended_type_info & type_
);
public:
- // account for bogus gcc warning
- #if defined(__GNUC__)
- virtual
- #endif
- BOOST_ARCHIVE_DECL ~basic_pointer_oserializer();
+ virtual BOOST_ARCHIVE_DECL ~basic_pointer_oserializer();
virtual const basic_oserializer & get_basic_serializer() const = 0;
virtual void save_object_ptr(
basic_oarchive & ar,
diff --git a/boost/archive/detail/interface_oarchive.hpp b/boost/archive/detail/interface_oarchive.hpp
index 187013b6cd..359463ed9d 100644
--- a/boost/archive/detail/interface_oarchive.hpp
+++ b/boost/archive/detail/interface_oarchive.hpp
@@ -29,7 +29,7 @@ namespace boost {
namespace archive {
namespace detail {
-class BOOST_ARCHIVE_OR_WARCHIVE_DECL basic_pointer_oserializer;
+class basic_pointer_oserializer;
template<class Archive>
class interface_oarchive
@@ -75,7 +75,7 @@ public:
template<class T>
Archive & operator&(const T & t){
return * this ->This() << t;
- };
+ }
};
} // namespace detail
diff --git a/boost/archive/detail/iserializer.hpp b/boost/archive/detail/iserializer.hpp
index d6d3f42f6e..6419e623c8 100644
--- a/boost/archive/detail/iserializer.hpp
+++ b/boost/archive/detail/iserializer.hpp
@@ -57,10 +57,16 @@ namespace std{
#include <boost/type_traits/is_polymorphic.hpp>
#include <boost/serialization/assume_abstract.hpp>
-#define DONT_USE_HAS_NEW_OPERATOR ( \
- BOOST_WORKAROUND(__IBMCPP__, < 1210) \
- || defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x590) \
-)
+
+#ifndef BOOST_MSVC
+ #define DONT_USE_HAS_NEW_OPERATOR ( \
+ BOOST_WORKAROUND(__IBMCPP__, < 1210) \
+ || defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x590) \
+ )
+#else
+ #define DONT_USE_HAS_NEW_OPERATOR 0
+#endif
+
#if ! DONT_USE_HAS_NEW_OPERATOR
#include <boost/type_traits/has_new_operator.hpp>
#endif
@@ -220,20 +226,25 @@ struct heap_allocation {
static T * invoke_new() {
return static_cast<T *>((T::operator new)(sizeof(T)));
}
+ template<void D(void *, std::size_t)>
+ static void deleter(void * t, std::size_t s){
+ D(t, s);
+ }
+
+ template<void D(void *)>
+ static void deleter(void * t, std::size_t s){
+ D(t);
+ }
static void invoke_delete(T * t) {
// if compilation fails here, the likely cause that the class
// T has a class specific new operator but no class specific
- // delete operator which matches the following signature. Fix
- // your program to have this. Note that adding operator delete
- // with only one parameter doesn't seem correct to me since
- // the standard(3.7.4.2) says "
- // "If a class T has a member deallocation function named
- // 'operator delete' with exactly one parameter, then that function
- // is a usual (non-placement) deallocation function" which I take
- // to mean that it will call the destructor of type T which we don't
- // want to do here.
- // Note: reliance upon automatic conversion from T * to void * here
- (T::operator delete)(t, sizeof(T));
+ // delete operator which matches the following signature.
+ // note that this solution addresses the issue that two
+ // possible signatures. But it doesn't address the possibility
+ // that the class might have class specific new with NO
+ // class specific delete at all. Patches (compatible with
+ // C++03) welcome!
+ deleter<T::operator delete>(t, sizeof(T));
}
};
struct doesnt_have_new_operator {
diff --git a/boost/archive/detail/polymorphic_iarchive_route.hpp b/boost/archive/detail/polymorphic_iarchive_route.hpp
index 2c57a3f51c..105685ebbd 100644
--- a/boost/archive/detail/polymorphic_iarchive_route.hpp
+++ b/boost/archive/detail/polymorphic_iarchive_route.hpp
@@ -39,8 +39,8 @@ namespace serialization {
namespace archive {
namespace detail{
-class BOOST_ARCHIVE_DECL basic_iserializer;
-class BOOST_ARCHIVE_DECL basic_pointer_iserializer;
+class basic_iserializer;
+class basic_pointer_iserializer;
#ifdef BOOST_MSVC
# pragma warning(push)
diff --git a/boost/archive/detail/polymorphic_oarchive_route.hpp b/boost/archive/detail/polymorphic_oarchive_route.hpp
index ae750133a8..b23fd6bf39 100644
--- a/boost/archive/detail/polymorphic_oarchive_route.hpp
+++ b/boost/archive/detail/polymorphic_oarchive_route.hpp
@@ -39,8 +39,8 @@ namespace serialization {
namespace archive {
namespace detail{
-class BOOST_ARCHIVE_DECL basic_oserializer;
-class BOOST_ARCHIVE_DECL basic_pointer_oserializer;
+class basic_oserializer;
+class basic_pointer_oserializer;
#ifdef BOOST_MSVC
# pragma warning(push)
diff --git a/boost/archive/impl/xml_iarchive_impl.ipp b/boost/archive/impl/xml_iarchive_impl.ipp
index 7639ecb3b1..bf94774987 100644
--- a/boost/archive/impl/xml_iarchive_impl.ipp
+++ b/boost/archive/impl/xml_iarchive_impl.ipp
@@ -18,10 +18,11 @@ namespace std{
#endif
#ifndef BOOST_NO_CWCHAR
-#include <cstdlib> // mbtowc
+#include <cwchar> // mbstate_t and mbrtowc
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
- using ::mbtowc;
+ using ::mbstate_t;
+ using ::mbrtowc;
} // namespace std
#endif
#endif // BOOST_NO_CWCHAR
@@ -64,21 +65,22 @@ xml_iarchive_impl<Archive>::load(std::wstring &ws){
if(NULL != ws.data())
#endif
ws.resize(0);
+ std::mbstate_t mbs;
const char * start = s.data();
const char * end = start + s.size();
while(start < end){
wchar_t wc;
- int resultx = std::mbtowc(&wc, start, end - start);
- if(0 < resultx){
- start += resultx;
- ws += wc;
+ std::size_t result = std::mbrtowc(&wc, start, end - start, &mbs);
+ if(result == static_cast<std::size_t>(-1))
+ boost::serialization::throw_exception(
+ iterators::dataflow_exception(
+ iterators::dataflow_exception::invalid_conversion
+ )
+ );
+ if(result == static_cast<std::size_t>(-2))
continue;
- }
- boost::serialization::throw_exception(
- iterators::dataflow_exception(
- iterators::dataflow_exception::invalid_conversion
- )
- );
+ start += result;
+ ws += wc;
}
}
#endif // BOOST_NO_STD_WSTRING
@@ -91,24 +93,28 @@ xml_iarchive_impl<Archive>::load(wchar_t * ws){
bool result = gimpl->parse_string(is, s);
if(! result)
boost::serialization::throw_exception(
- xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+ xml_archive_exception(
+ xml_archive_exception::xml_archive_parsing_error
+ )
);
+ std::mbstate_t mbs;
const char * start = s.data();
const char * end = start + s.size();
while(start < end){
wchar_t wc;
- int length = std::mbtowc(&wc, start, end - start);
- if(0 < length){
- start += length;
- *ws++ = wc;
+ std::size_t length = std::mbrtowc(&wc, start, end - start, &mbs);
+ if(static_cast<std::size_t>(-1) == length)
+ boost::serialization::throw_exception(
+ iterators::dataflow_exception(
+ iterators::dataflow_exception::invalid_conversion
+ )
+ );
+ if(static_cast<std::size_t>(-2) == length)
continue;
- }
- boost::serialization::throw_exception(
- iterators::dataflow_exception(
- iterators::dataflow_exception::invalid_conversion
- )
- );
+
+ start += length;
+ *ws++ = wc;
}
*ws = L'\0';
}
diff --git a/boost/archive/iterators/head_iterator.hpp b/boost/archive/iterators/head_iterator.hpp
deleted file mode 100644
index 6ad7d6b32b..0000000000
--- a/boost/archive/iterators/head_iterator.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef BOOST_ARCHIVE_ITERATORS_HEAD_ITERATOR_HPP
-#define BOOST_ARCHIVE_ITERATORS_HEAD_ITERATOR_HPP
-
-// MS compatible compilers support #pragma once
-#if defined(_MSC_VER)
-# pragma once
-#endif
-
-/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
-// head_iterator.hpp
-
-// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
-// Use, modification and distribution is 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 for updates, documentation, and revision history.
-
-#include <boost/iterator/iterator_adaptor.hpp>
-#include <boost/iterator/iterator_traits.hpp>
-
-namespace boost {
-namespace archive {
-namespace iterators {
-
-template<class Predicate, class Base>
-class head_iterator
- : public boost::iterator_adaptor<
- head_iterator<Predicate, Base>,
- Base,
- use_default,
- single_pass_traversal_tag
- >
-{
-private:
- friend class iterator_core_access;
- typedef boost::iterator_adaptor<
- head_iterator<Predicate, Base>,
- Base,
- use_default,
- single_pass_traversal_tag
- > super_t;
-
- typedef head_iterator<Predicate, Base> this_t;
- typedef super_t::value_type value_type;
- typedef super_t::reference reference_type;
-
- reference_type dereference_impl(){
- if(! m_end){
- while(! m_predicate(* this->base_reference()))
- ++ this->base_reference();
- m_end = true;
- }
- return * this->base_reference();
- }
-
- reference_type dereference() const {
- return const_cast<this_t *>(this)->dereference_impl();
- }
-
- void increment(){
- ++base_reference();
- }
- Predicate m_predicate;
- bool m_end;
-public:
- template<class T>
- head_iterator(Predicate f, T start) :
- super_t(Base(start)),
- m_predicate(f),
- m_end(false)
- {}
-
-};
-
-} // namespace iterators
-} // namespace archive
-} // namespace boost
-
-#endif // BOOST_ARCHIVE_ITERATORS_HEAD_ITERATOR_HPP
diff --git a/boost/archive/iterators/mb_from_wchar.hpp b/boost/archive/iterators/mb_from_wchar.hpp
index deb798f623..d76eb3e2d2 100644
--- a/boost/archive/iterators/mb_from_wchar.hpp
+++ b/boost/archive/iterators/mb_from_wchar.hpp
@@ -18,13 +18,14 @@
#include <boost/assert.hpp>
#include <cstddef> // size_t
-#include <cstdlib> // for wctomb()
+#include <cwchar> // for mbstate_t and wcrtomb()
#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
using ::size_t;
- using ::wctomb;
+ using ::mbstate_t;
+ using ::wcrtomb;
} // namespace std
#endif
@@ -82,13 +83,10 @@ class mb_from_wchar
}
void fill(){
+ std::mbstate_t mbs;
+ std::wcrtomb(0, 0, &mbs);
wchar_t value = * this->base_reference();
- #if (defined(__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 3) \
- || ((__MINGW32_MAJOR_VERSION == 3) && (__MINGW32_MINOR_VERSION >= 8))))
- m_bend = std::wcrtomb(m_buffer, value,0);
- #else
- m_bend = std::wctomb(m_buffer, value);
- #endif
+ m_bend = std::wcrtomb(m_buffer, value, &mbs);
BOOST_ASSERT(-1 != m_bend);
BOOST_ASSERT((std::size_t)m_bend <= sizeof(m_buffer));
BOOST_ASSERT(m_bend > 0);
diff --git a/boost/archive/iterators/wchar_from_mb.hpp b/boost/archive/iterators/wchar_from_mb.hpp
index ad1d4cbb7d..998a4686b2 100644
--- a/boost/archive/iterators/wchar_from_mb.hpp
+++ b/boost/archive/iterators/wchar_from_mb.hpp
@@ -19,13 +19,13 @@
#include <boost/assert.hpp>
#include <cctype>
#include <cstddef> // size_t
-#include <cstdlib> // mblen
+#include <cwchar> // mbstate_t and mbrtowc
#include <boost/config.hpp>
#if defined(BOOST_NO_STDC_NAMESPACE)
namespace std{
- using ::mblen;
- using ::mbtowc;
+ using ::mbstate_t;
+ using ::mbrtowc;
} // namespace std
#endif
@@ -101,23 +101,17 @@ public:
template<class Base>
wchar_t wchar_from_mb<Base>::drain(){
- char buffer[9];
- char * bptr = buffer;
- char val;
- for(std::size_t i = 0; i++ < (unsigned)MB_CUR_MAX;){
- val = * this->base_reference();
- *bptr++ = val;
- int result = std::mblen(buffer, i);
- if(-1 != result)
- break;
- ++(this->base_reference());
- }
+ std::mbstate_t mbs;
wchar_t retval;
- int result = std::mbtowc(& retval, buffer, MB_CUR_MAX);
- if(0 >= result)
- boost::serialization::throw_exception(iterators::dataflow_exception(
- iterators::dataflow_exception::invalid_conversion
- ));
+ std::size_t result;
+ do {
+ char val = *this->base_reference();
+ result = std::mbrtowc(&retval, &val, 1, &mbs);
+ if(result == static_cast<std::size_t>(-1))
+ boost::serialization::throw_exception(iterators::dataflow_exception(
+ iterators::dataflow_exception::invalid_conversion
+ ));
+ } while (result == static_cast<std::size_t>(-2));
return retval;
}
diff --git a/boost/archive/polymorphic_iarchive.hpp b/boost/archive/polymorphic_iarchive.hpp
index 7f19410dd8..d3c59a9f0f 100644
--- a/boost/archive/polymorphic_iarchive.hpp
+++ b/boost/archive/polymorphic_iarchive.hpp
@@ -43,8 +43,8 @@ namespace serialization {
} // namespace serialization
namespace archive {
namespace detail {
- class BOOST_ARCHIVE_DECL basic_iarchive;
- class BOOST_ARCHIVE_DECL basic_iarchive;
+ class basic_iarchive;
+ class basic_iserializer;
}
class polymorphic_iarchive;
diff --git a/boost/archive/polymorphic_oarchive.hpp b/boost/archive/polymorphic_oarchive.hpp
index aa30b2ac3e..edac4edb1e 100644
--- a/boost/archive/polymorphic_oarchive.hpp
+++ b/boost/archive/polymorphic_oarchive.hpp
@@ -42,8 +42,8 @@ namespace serialization {
} // namespace serialization
namespace archive {
namespace detail {
- class BOOST_ARCHIVE_DECL basic_oarchive;
- class BOOST_ARCHIVE_DECL basic_oserializer;
+ class basic_oarchive;
+ class basic_oserializer;
}
class polymorphic_oarchive;
diff --git a/boost/archive/xml_archive_exception.hpp b/boost/archive/xml_archive_exception.hpp
index b07f9a0c33..82c53ef5d3 100644
--- a/boost/archive/xml_archive_exception.hpp
+++ b/boost/archive/xml_archive_exception.hpp
@@ -45,6 +45,8 @@ public:
const char * e1 = NULL,
const char * e2 = NULL
);
+ BOOST_ARCHIVE_DECL xml_archive_exception(xml_archive_exception const &) ;
+ virtual BOOST_ARCHIVE_DECL ~xml_archive_exception() BOOST_NOEXCEPT_OR_NOTHROW ;
};
}// namespace archive
diff --git a/boost/asio/basic_serial_port.hpp b/boost/asio/basic_serial_port.hpp
index e0f83b0a5b..d318963a12 100644
--- a/boost/asio/basic_serial_port.hpp
+++ b/boost/asio/basic_serial_port.hpp
@@ -445,7 +445,7 @@ public:
*
* @param option The option value to be obtained from the serial port.
*
- * @param ec Set to indicate what error occured, if any.
+ * @param ec Set to indicate what error occurred, if any.
*
* @sa GettableSerialPortOption @n
* boost::asio::serial_port_base::baud_rate @n
diff --git a/boost/asio/detail/config.hpp b/boost/asio/detail/config.hpp
index 0f9e52d593..a39d85d600 100644
--- a/boost/asio/detail/config.hpp
+++ b/boost/asio/detail/config.hpp
@@ -221,8 +221,7 @@
# define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true)
# endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
-# endif // defined(__GNUC__)
-# if defined(BOOST_ASIO_MSVC)
+# elif defined(BOOST_ASIO_MSVC)
# if (_MSC_VER >= 1900)
# define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true)
# endif // (_MSC_VER >= 1900)
@@ -515,25 +514,41 @@
# endif // !defined(BOOST_ASIO_DISABLE_STD_MUTEX_AND_CONDVAR)
#endif // !defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
-// WinRT target.
-#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
-# if defined(__cplusplus_winrt)
+// Windows App target. Windows but with a limited API.
+#if !defined(BOOST_ASIO_WINDOWS_APP)
+# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0603)
# include <winapifamily.h>
# if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) \
&& !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
-# define BOOST_ASIO_WINDOWS_RUNTIME 1
+# define BOOST_ASIO_WINDOWS_APP 1
# endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
// && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
-# endif // defined(__cplusplus_winrt)
+# endif // defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0603)
+#endif // !defined(BOOST_ASIO_WINDOWS_APP)
+
+// Legacy WinRT target. Windows App is preferred.
+#if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
+# if !defined(BOOST_ASIO_WINDOWS_APP)
+# if defined(__cplusplus_winrt)
+# include <winapifamily.h>
+# if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) \
+ && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+# define BOOST_ASIO_WINDOWS_RUNTIME 1
+# endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
+ // && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+# endif // defined(__cplusplus_winrt)
+# endif // !defined(BOOST_ASIO_WINDOWS_APP)
#endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
-// Windows target. Excludes WinRT.
+// Windows target. Excludes WinRT but includes Windows App targets.
#if !defined(BOOST_ASIO_WINDOWS)
# if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
# if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS)
# define BOOST_ASIO_WINDOWS 1
# elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
# define BOOST_ASIO_WINDOWS 1
+# elif defined(BOOST_ASIO_WINDOWS_APP)
+# define BOOST_ASIO_WINDOWS 1
# endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS)
# endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
#endif // !defined(BOOST_ASIO_WINDOWS)
@@ -601,11 +616,11 @@
#if !defined(BOOST_ASIO_HAS_IOCP)
# if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400)
-# if !defined(UNDER_CE)
+# if !defined(UNDER_CE) && !defined(BOOST_ASIO_WINDOWS_APP)
# if !defined(BOOST_ASIO_DISABLE_IOCP)
# define BOOST_ASIO_HAS_IOCP 1
# endif // !defined(BOOST_ASIO_DISABLE_IOCP)
-# endif // !defined(UNDER_CE)
+# endif // !defined(UNDER_CE) && !defined(BOOST_ASIO_WINDOWS_APP)
# endif // defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400)
# endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
#endif // !defined(BOOST_ASIO_HAS_IOCP)
@@ -721,9 +736,9 @@
#if !defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
# if !defined(BOOST_ASIO_DISABLE_WINDOWS_OBJECT_HANDLE)
# if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
-# if !defined(UNDER_CE)
+# if !defined(UNDER_CE) && !defined(BOOST_ASIO_WINDOWS_APP)
# define BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE 1
-# endif // !defined(UNDER_CE)
+# endif // !defined(UNDER_CE) && !defined(BOOST_ASIO_WINDOWS_APP)
# endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
# endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_OBJECT_HANDLE)
#endif // !defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
diff --git a/boost/asio/detail/handler_type_requirements.hpp b/boost/asio/detail/handler_type_requirements.hpp
index a2d3fd1f20..228e93c69f 100644
--- a/boost/asio/detail/handler_type_requirements.hpp
+++ b/boost/asio/detail/handler_type_requirements.hpp
@@ -53,8 +53,18 @@
# include <boost/asio/handler_type.hpp>
#endif // defined(BOOST_ASIO_ENABLE_HANDLER_TYPE_REQUIREMENTS)
-// Newer gcc needs special treatment to suppress unused typedef warnings.
-#if defined(__GNUC__)
+// Newer gcc, clang need special treatment to suppress unused typedef warnings.
+#if defined(__clang__)
+# if defined(__apple_build_version__)
+# if (__clang_major__ >= 7)
+# define BOOST_ASIO_UNUSED_TYPEDEF __attribute__((__unused__))
+# endif // (__clang_major__ >= 7)
+# elif ((__clang_major__ == 3) && (__clang_minor__ >= 6)) \
+ || (__clang_major__ > 3)
+# define BOOST_ASIO_UNUSED_TYPEDEF __attribute__((__unused__))
+# endif // ((__clang_major__ == 3) && (__clang_minor__ >= 6))
+ // || (__clang_major__ > 3)
+#elif defined(__GNUC__)
# if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) || (__GNUC__ > 4)
# define BOOST_ASIO_UNUSED_TYPEDEF __attribute__((__unused__))
# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) || (__GNUC__ > 4)
diff --git a/boost/asio/detail/impl/socket_ops.ipp b/boost/asio/detail/impl/socket_ops.ipp
index dc068e0e03..976eaa42db 100644
--- a/boost/asio/detail/impl/socket_ops.ipp
+++ b/boost/asio/detail/impl/socket_ops.ipp
@@ -1634,7 +1634,8 @@ int getpeername(socket_type s, socket_addr_type* addr,
return socket_error_retval;
}
-#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#if defined(BOOST_ASIO_WINDOWS) && !defined(BOOST_ASIO_WINDOWS_APP) \
+ || defined(__CYGWIN__)
if (cached)
{
// Check if socket is still connected.
@@ -1655,9 +1656,11 @@ int getpeername(socket_type s, socket_addr_type* addr,
ec = boost::system::error_code();
return 0;
}
-#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#else // defined(BOOST_ASIO_WINDOWS) && !defined(BOOST_ASIO_WINDOWS_APP)
+ // || defined(__CYGWIN__)
(void)cached;
-#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#endif // defined(BOOST_ASIO_WINDOWS) && !defined(BOOST_ASIO_WINDOWS_APP)
+ // || defined(__CYGWIN__)
clear_last_error();
int result = error_wrapper(call_getpeername(
@@ -2581,7 +2584,8 @@ inline void gai_strcpy(char* target, const char* source, std::size_t max_size)
strcpy_s(target, max_size, source);
#else // defined(BOOST_ASIO_HAS_SECURE_RTL)
*target = 0;
- strncat(target, source, max_size);
+ if (max_size > 0)
+ strncat(target, source, max_size - 1);
#endif // defined(BOOST_ASIO_HAS_SECURE_RTL)
}
diff --git a/boost/asio/detail/impl/win_event.ipp b/boost/asio/detail/impl/win_event.ipp
index 0fffbce9cd..40f3f641eb 100644
--- a/boost/asio/detail/impl/win_event.ipp
+++ b/boost/asio/detail/impl/win_event.ipp
@@ -32,7 +32,11 @@ namespace detail {
win_event::win_event()
: state_(0)
{
- events_[0] = ::CreateEvent(0, true, false, 0);
+#if defined(BOOST_ASIO_WINDOWS_APP)
+ events_[0] = ::CreateEventExW(0, 0, CREATE_EVENT_MANUAL_RESET, 0);
+#else // defined(BOOST_ASIO_WINDOWS_APP)
+ events_[0] = ::CreateEventW(0, true, false, 0);
+#endif // defined(BOOST_ASIO_WINDOWS_APP)
if (!events_[0])
{
DWORD last_error = ::GetLastError();
@@ -41,7 +45,11 @@ win_event::win_event()
boost::asio::detail::throw_error(ec, "event");
}
- events_[1] = ::CreateEvent(0, false, false, 0);
+#if defined(BOOST_ASIO_WINDOWS_APP)
+ events_[1] = ::CreateEventExW(0, 0, 0, 0);
+#else // defined(BOOST_ASIO_WINDOWS_APP)
+ events_[1] = ::CreateEventW(0, false, false, 0);
+#endif // defined(BOOST_ASIO_WINDOWS_APP)
if (!events_[1])
{
DWORD last_error = ::GetLastError();
diff --git a/boost/asio/detail/impl/win_iocp_handle_service.ipp b/boost/asio/detail/impl/win_iocp_handle_service.ipp
index b0c784e556..24820a55b0 100644
--- a/boost/asio/detail/impl/win_iocp_handle_service.ipp
+++ b/boost/asio/detail/impl/win_iocp_handle_service.ipp
@@ -40,7 +40,7 @@ public:
OffsetHigh = 0;
// Create a non-signalled manual-reset event, for GetOverlappedResult.
- hEvent = ::CreateEvent(0, TRUE, FALSE, 0);
+ hEvent = ::CreateEventW(0, TRUE, FALSE, 0);
if (hEvent)
{
// As documented in GetQueuedCompletionStatus, setting the low order
diff --git a/boost/asio/detail/impl/win_mutex.ipp b/boost/asio/detail/impl/win_mutex.ipp
index 60ce9dd598..be1d1b8111 100644
--- a/boost/asio/detail/impl/win_mutex.ipp
+++ b/boost/asio/detail/impl/win_mutex.ipp
@@ -44,6 +44,8 @@ int win_mutex::do_init()
// we'll just call the Windows API and hope.
# if defined(UNDER_CE)
::InitializeCriticalSection(&crit_section_);
+# elif defined(BOOST_ASIO_WINDOWS_APP)
+ ::InitializeCriticalSectionEx(&crit_section_, 0x80000000, 0);
# else
if (!::InitializeCriticalSectionAndSpinCount(&crit_section_, 0x80000000))
return ::GetLastError();
@@ -54,6 +56,9 @@ int win_mutex::do_init()
{
# if defined(UNDER_CE)
::InitializeCriticalSection(&crit_section_);
+# elif defined(BOOST_ASIO_WINDOWS_APP)
+ if (!::InitializeCriticalSectionEx(&crit_section_, 0, 0))
+ return ::GetLastError();
# else
if (!::InitializeCriticalSectionAndSpinCount(&crit_section_, 0x80000000))
return ::GetLastError();
diff --git a/boost/asio/detail/impl/win_static_mutex.ipp b/boost/asio/detail/impl/win_static_mutex.ipp
index 02b44b5d37..14a08efd90 100644
--- a/boost/asio/detail/impl/win_static_mutex.ipp
+++ b/boost/asio/detail/impl/win_static_mutex.ipp
@@ -50,13 +50,23 @@ int win_static_mutex::do_init()
mutex_name, 128, L"asio-58CCDC44-6264-4842-90C2-F3C545CB8AA7-%u-%p",
static_cast<unsigned int>(::GetCurrentProcessId()), this);
+#if defined(BOOST_ASIO_WINDOWS_APP)
+ HANDLE mutex = ::CreateMutexExW(0, mutex_name, CREATE_MUTEX_INITIAL_OWNER, 0);
+#else // defined(BOOST_ASIO_WINDOWS_APP)
HANDLE mutex = ::CreateMutexW(0, TRUE, mutex_name);
+#endif // defined(BOOST_ASIO_WINDOWS_APP)
DWORD last_error = ::GetLastError();
if (mutex == 0)
return ::GetLastError();
if (last_error == ERROR_ALREADY_EXISTS)
+ {
+#if defined(BOOST_ASIO_WINDOWS_APP)
+ ::WaitForSingleObjectEx(mutex, INFINITE, false);
+#else // defined(BOOST_ASIO_WINDOWS_APP)
::WaitForSingleObject(mutex, INFINITE);
+#endif // defined(BOOST_ASIO_WINDOWS_APP)
+ }
if (initialised_)
{
@@ -84,6 +94,14 @@ int win_static_mutex::do_init()
{
# if defined(UNDER_CE)
::InitializeCriticalSection(&crit_section_);
+# elif defined(BOOST_ASIO_WINDOWS_APP)
+ if (!::InitializeCriticalSectionEx(&crit_section_, 0, 0))
+ {
+ last_error = ::GetLastError();
+ ::ReleaseMutex(mutex);
+ ::CloseHandle(mutex);
+ return last_error;
+ }
# else
if (!::InitializeCriticalSectionAndSpinCount(&crit_section_, 0x80000000))
{
diff --git a/boost/asio/detail/impl/win_thread.ipp b/boost/asio/detail/impl/win_thread.ipp
index 727c122e95..5ebd0e68a0 100644
--- a/boost/asio/detail/impl/win_thread.ipp
+++ b/boost/asio/detail/impl/win_thread.ipp
@@ -17,7 +17,9 @@
#include <boost/asio/detail/config.hpp>
-#if defined(BOOST_ASIO_WINDOWS) && !defined(UNDER_CE)
+#if defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_APP) \
+ && !defined(UNDER_CE)
#include <process.h>
#include <boost/asio/detail/throw_error.hpp>
@@ -57,7 +59,7 @@ void win_thread::join()
void win_thread::start_thread(func_base* arg, unsigned int stack_size)
{
::HANDLE entry_event = 0;
- arg->entry_event_ = entry_event = ::CreateEvent(0, true, false, 0);
+ arg->entry_event_ = entry_event = ::CreateEventW(0, true, false, 0);
if (!entry_event)
{
DWORD last_error = ::GetLastError();
@@ -67,7 +69,7 @@ void win_thread::start_thread(func_base* arg, unsigned int stack_size)
boost::asio::detail::throw_error(ec, "thread.entry_event");
}
- arg->exit_event_ = exit_event_ = ::CreateEvent(0, true, false, 0);
+ arg->exit_event_ = exit_event_ = ::CreateEventW(0, true, false, 0);
if (!exit_event_)
{
DWORD last_error = ::GetLastError();
@@ -136,6 +138,8 @@ void __stdcall apc_function(ULONG_PTR) {}
#include <boost/asio/detail/pop_options.hpp>
-#endif // defined(BOOST_ASIO_WINDOWS) && !defined(UNDER_CE)
+#endif // defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_APP)
+ // && !defined(UNDER_CE)
#endif // BOOST_ASIO_DETAIL_IMPL_WIN_THREAD_IPP
diff --git a/boost/asio/detail/local_free_on_block_exit.hpp b/boost/asio/detail/local_free_on_block_exit.hpp
index 47b5dafc46..a3b597e836 100644
--- a/boost/asio/detail/local_free_on_block_exit.hpp
+++ b/boost/asio/detail/local_free_on_block_exit.hpp
@@ -18,6 +18,7 @@
#include <boost/asio/detail/config.hpp>
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
+#if !defined(BOOST_ASIO_WINDOWS_APP)
#include <boost/asio/detail/noncopyable.hpp>
#include <boost/asio/detail/socket_types.hpp>
@@ -54,6 +55,7 @@ private:
#include <boost/asio/detail/pop_options.hpp>
+#endif // !defined(BOOST_ASIO_WINDOWS_APP)
#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
#endif // BOOST_ASIO_DETAIL_LOCAL_FREE_ON_BLOCK_EXIT_HPP
diff --git a/boost/asio/detail/socket_types.hpp b/boost/asio/detail/socket_types.hpp
index f4be937703..e8c71093a0 100644
--- a/boost/asio/detail/socket_types.hpp
+++ b/boost/asio/detail/socket_types.hpp
@@ -37,7 +37,9 @@
# endif // defined(WINAPI_FAMILY)
# include <winsock2.h>
# include <ws2tcpip.h>
-# include <mswsock.h>
+# if !defined(BOOST_ASIO_WINDOWS_APP)
+# include <mswsock.h>
+# endif // !defined(BOOST_ASIO_WINDOWS_APP)
# if defined(BOOST_ASIO_WSPIAPI_H_DEFINED)
# undef _WSPIAPI_H_
# undef BOOST_ASIO_WSPIAPI_H_DEFINED
@@ -47,7 +49,9 @@
# pragma comment(lib, "ws2.lib")
# elif defined(_MSC_VER) || defined(__BORLANDC__)
# pragma comment(lib, "ws2_32.lib")
-# pragma comment(lib, "mswsock.lib")
+# if !defined(BOOST_ASIO_WINDOWS_APP)
+# pragma comment(lib, "mswsock.lib")
+# endif // !defined(BOOST_ASIO_WINDOWS_APP)
# endif // defined(_MSC_VER) || defined(__BORLANDC__)
# endif // !defined(BOOST_ASIO_NO_DEFAULT_LINKED_LIBS)
# include <boost/asio/detail/old_win_sdk_compat.hpp>
diff --git a/boost/asio/detail/thread.hpp b/boost/asio/detail/thread.hpp
index adc5a55708..1076e6452c 100644
--- a/boost/asio/detail/thread.hpp
+++ b/boost/asio/detail/thread.hpp
@@ -20,8 +20,8 @@
#if !defined(BOOST_ASIO_HAS_THREADS)
# include <boost/asio/detail/null_thread.hpp>
#elif defined(BOOST_ASIO_WINDOWS)
-# if defined(UNDER_CE)
-# include <boost/asio/detail/wince_thread.hpp>
+# if defined(BOOST_ASIO_WINDOWS_APP) || defined(UNDER_CE)
+# include <boost/asio/detail/winapi_thread.hpp>
# else
# include <boost/asio/detail/win_thread.hpp>
# endif
@@ -40,8 +40,8 @@ namespace detail {
#if !defined(BOOST_ASIO_HAS_THREADS)
typedef null_thread thread;
#elif defined(BOOST_ASIO_WINDOWS)
-# if defined(UNDER_CE)
-typedef wince_thread thread;
+# if defined(BOOST_ASIO_WINDOWS_APP) || defined(UNDER_CE)
+typedef winapi_thread thread;
# else
typedef win_thread thread;
# endif
diff --git a/boost/asio/detail/win_event.hpp b/boost/asio/detail/win_event.hpp
index ff4df5be23..d9aba6cbec 100644
--- a/boost/asio/detail/win_event.hpp
+++ b/boost/asio/detail/win_event.hpp
@@ -102,7 +102,11 @@ public:
{
state_ += 2;
lock.unlock();
+#if defined(BOOST_ASIO_WINDOWS_APP)
+ ::WaitForMultipleObjectsEx(2, events_, false, INFINITE, false);
+#else // defined(BOOST_ASIO_WINDOWS_APP)
::WaitForMultipleObjects(2, events_, false, INFINITE);
+#endif // defined(BOOST_ASIO_WINDOWS_APP)
lock.lock();
state_ -= 2;
}
diff --git a/boost/asio/detail/win_thread.hpp b/boost/asio/detail/win_thread.hpp
index e465430031..44bf8da535 100644
--- a/boost/asio/detail/win_thread.hpp
+++ b/boost/asio/detail/win_thread.hpp
@@ -17,7 +17,9 @@
#include <boost/asio/detail/config.hpp>
-#if defined(BOOST_ASIO_WINDOWS) && !defined(UNDER_CE)
+#if defined(BOOST_ASIO_WINDOWS) \
+ && !defined(BOOST_ASIO_WINDOWS_APP) \
+ && !defined(UNDER_CE)
#include <boost/asio/detail/noncopyable.hpp>
#include <boost/asio/detail/socket_types.hpp>
@@ -136,6 +138,8 @@ private:
# include <boost/asio/detail/impl/win_thread.ipp>
#endif // defined(BOOST_ASIO_HEADER_ONLY)
-#endif // defined(BOOST_ASIO_WINDOWS) && !defined(UNDER_CE)
+#endif // defined(BOOST_ASIO_WINDOWS)
+ // && !defined(BOOST_ASIO_WINDOWS_APP)
+ // && !defined(UNDER_CE)
#endif // BOOST_ASIO_DETAIL_WIN_THREAD_HPP
diff --git a/boost/asio/detail/winapi_thread.hpp b/boost/asio/detail/winapi_thread.hpp
new file mode 100644
index 0000000000..ce4050b2d1
--- /dev/null
+++ b/boost/asio/detail/winapi_thread.hpp
@@ -0,0 +1,124 @@
+//
+// detail/winapi_thread.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot 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)
+//
+
+#ifndef BOOST_ASIO_DETAIL_WINAPI_THREAD_HPP
+#define BOOST_ASIO_DETAIL_WINAPI_THREAD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include <boost/asio/detail/config.hpp>
+
+#if defined(BOOST_ASIO_WINDOWS)
+#if defined(BOOST_ASIO_WINDOWS_APP) || defined(UNDER_CE)
+
+#include <memory>
+#include <boost/asio/detail/noncopyable.hpp>
+#include <boost/asio/detail/socket_types.hpp>
+#include <boost/asio/detail/throw_error.hpp>
+#include <boost/asio/error.hpp>
+
+#include <boost/asio/detail/push_options.hpp>
+
+namespace boost {
+namespace asio {
+namespace detail {
+
+DWORD WINAPI winapi_thread_function(LPVOID arg);
+
+class winapi_thread
+ : private noncopyable
+{
+public:
+ // Constructor.
+ template <typename Function>
+ winapi_thread(Function f, unsigned int = 0)
+ {
+ std::auto_ptr<func_base> arg(new func<Function>(f));
+ DWORD thread_id = 0;
+ thread_ = ::CreateThread(0, 0, winapi_thread_function,
+ arg.get(), 0, &thread_id);
+ if (!thread_)
+ {
+ DWORD last_error = ::GetLastError();
+ boost::system::error_code ec(last_error,
+ boost::asio::error::get_system_category());
+ boost::asio::detail::throw_error(ec, "thread");
+ }
+ arg.release();
+ }
+
+ // Destructor.
+ ~winapi_thread()
+ {
+ ::CloseHandle(thread_);
+ }
+
+ // Wait for the thread to exit.
+ void join()
+ {
+#if defined(BOOST_ASIO_WINDOWS_APP)
+ ::WaitForSingleObjectEx(thread_, INFINITE, false);
+#else // defined(BOOST_ASIO_WINDOWS_APP)
+ ::WaitForSingleObject(thread_, INFINITE);
+#endif // defined(BOOST_ASIO_WINDOWS_APP)
+ }
+
+private:
+ friend DWORD WINAPI winapi_thread_function(LPVOID arg);
+
+ class func_base
+ {
+ public:
+ virtual ~func_base() {}
+ virtual void run() = 0;
+ };
+
+ template <typename Function>
+ class func
+ : public func_base
+ {
+ public:
+ func(Function f)
+ : f_(f)
+ {
+ }
+
+ virtual void run()
+ {
+ f_();
+ }
+
+ private:
+ Function f_;
+ };
+
+ ::HANDLE thread_;
+};
+
+inline DWORD WINAPI winapi_thread_function(LPVOID arg)
+{
+ std::auto_ptr<winapi_thread::func_base> func(
+ static_cast<winapi_thread::func_base*>(arg));
+ func->run();
+ return 0;
+}
+
+} // namespace detail
+} // namespace asio
+} // namespace boost
+
+#include <boost/asio/detail/pop_options.hpp>
+
+#endif // defined(BOOST_ASIO_WINDOWS_APP) || defined(UNDER_CE)
+#endif // defined(BOOST_ASIO_WINDOWS)
+
+#endif // BOOST_ASIO_DETAIL_WINAPI_THREAD_HPP
diff --git a/boost/asio/ssl/impl/context.ipp b/boost/asio/ssl/impl/context.ipp
index 67191ade20..acb191a706 100644
--- a/boost/asio/ssl/impl/context.ipp
+++ b/boost/asio/ssl/impl/context.ipp
@@ -89,6 +89,14 @@ context::context(context::method m)
handle_ = ::SSL_CTX_new(::SSLv2_server_method());
break;
#endif // defined(OPENSSL_NO_SSL2)
+#if defined(OPENSSL_NO_SSL3)
+ case context::sslv3:
+ case context::sslv3_client:
+ case context::sslv3_server:
+ boost::asio::detail::throw_error(
+ boost::asio::error::invalid_argument, "context");
+ break;
+#else // defined(OPENSSL_NO_SSL3)
case context::sslv3:
handle_ = ::SSL_CTX_new(::SSLv3_method());
break;
@@ -98,6 +106,7 @@ context::context(context::method m)
case context::sslv3_server:
handle_ = ::SSL_CTX_new(::SSLv3_server_method());
break;
+#endif // defined(OPENSSL_NO_SSL3)
case context::tlsv1:
handle_ = ::SSL_CTX_new(::TLSv1_method());
break;
@@ -557,11 +566,15 @@ boost::system::error_code context::use_certificate_chain(
return ec;
}
+#if (OPENSSL_VERSION_NUMBER >= 0x10002000L) && !defined(LIBRESSL_VERSION_NUMBER)
+ ::SSL_CTX_clear_chain_certs(handle_);
+#else
if (handle_->extra_certs)
{
::sk_X509_pop_free(handle_->extra_certs, X509_free);
handle_->extra_certs = 0;
}
+#endif // (OPENSSL_VERSION_NUMBER >= 0x10002000L)
while (X509* cacert = ::PEM_read_bio_X509(bio.p, 0,
handle_->default_passwd_callback,
@@ -949,7 +962,8 @@ int context::password_callback_function(
strcpy_s(buf, size, passwd.c_str());
#else // defined(BOOST_ASIO_HAS_SECURE_RTL)
*buf = '\0';
- strncat(buf, passwd.c_str(), size);
+ if (size > 0)
+ strncat(buf, passwd.c_str(), size - 1);
#endif // defined(BOOST_ASIO_HAS_SECURE_RTL)
return static_cast<int>(strlen(buf));
diff --git a/boost/asio/ssl/old/detail/openssl_context_service.hpp b/boost/asio/ssl/old/detail/openssl_context_service.hpp
index 9b45e3585f..61eac6efc5 100644
--- a/boost/asio/ssl/old/detail/openssl_context_service.hpp
+++ b/boost/asio/ssl/old/detail/openssl_context_service.hpp
@@ -85,6 +85,13 @@ public:
impl = ::SSL_CTX_new(::SSLv2_server_method());
break;
#endif // defined(OPENSSL_NO_SSL2)
+#if defined(OPENSSL_NO_SSL3)
+ case context_base::sslv3:
+ case context_base::sslv3_client:
+ case context_base::sslv3_server:
+ boost::asio::detail::throw_error(boost::asio::error::invalid_argument);
+ break;
+#else // defined(OPENSSL_NO_SSL3)
case context_base::sslv3:
impl = ::SSL_CTX_new(::SSLv3_method());
break;
@@ -94,6 +101,7 @@ public:
case context_base::sslv3_server:
impl = ::SSL_CTX_new(::SSLv3_server_method());
break;
+#endif // defined(OPENSSL_NO_SSL3)
case context_base::tlsv1:
impl = ::SSL_CTX_new(::TLSv1_method());
break;
diff --git a/boost/asio/version.hpp b/boost/asio/version.hpp
index e8eefafb17..8d506405c2 100644
--- a/boost/asio/version.hpp
+++ b/boost/asio/version.hpp
@@ -18,6 +18,6 @@
// BOOST_ASIO_VERSION % 100 is the sub-minor version
// BOOST_ASIO_VERSION / 100 % 1000 is the minor version
// BOOST_ASIO_VERSION / 100000 is the major version
-#define BOOST_ASIO_VERSION 101006 // 1.10.6
+#define BOOST_ASIO_VERSION 101007 // 1.10.7
#endif // BOOST_ASIO_VERSION_HPP
diff --git a/boost/assert.hpp b/boost/assert.hpp
index 1713d9bb1d..9650d7a290 100644
--- a/boost/assert.hpp
+++ b/boost/assert.hpp
@@ -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
@@ -24,16 +26,18 @@
//
//
-// 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
diff --git a/boost/atomic/detail/atomic_flag.hpp b/boost/atomic/detail/atomic_flag.hpp
index 6a6667d8eb..7fb44cdb1a 100644
--- a/boost/atomic/detail/atomic_flag.hpp
+++ b/boost/atomic/detail/atomic_flag.hpp
@@ -42,7 +42,7 @@ struct atomic_flag
typedef atomics::detail::operations< 1u, false > operations;
typedef operations::storage_type storage_type;
- storage_type m_storage;
+ operations::aligned_storage_type m_storage;
BOOST_FORCEINLINE BOOST_CONSTEXPR atomic_flag() BOOST_NOEXCEPT : m_storage(0)
{
@@ -50,14 +50,14 @@ struct atomic_flag
BOOST_FORCEINLINE bool test_and_set(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return operations::test_and_set(m_storage, order);
+ return operations::test_and_set(m_storage.value, order);
}
BOOST_FORCEINLINE void clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
BOOST_ASSERT(order != memory_order_acquire);
BOOST_ASSERT(order != memory_order_acq_rel);
- operations::clear(m_storage, order);
+ operations::clear(m_storage.value, order);
}
BOOST_DELETED_FUNCTION(atomic_flag(atomic_flag const&))
diff --git a/boost/atomic/detail/atomic_template.hpp b/boost/atomic/detail/atomic_template.hpp
index bc3922a711..2deaded62f 100644
--- a/boost/atomic/detail/atomic_template.hpp
+++ b/boost/atomic/detail/atomic_template.hpp
@@ -22,7 +22,7 @@
#include <boost/type_traits/is_signed.hpp>
#include <boost/type_traits/is_integral.hpp>
#include <boost/atomic/detail/config.hpp>
-#include <boost/atomic/detail/casts.hpp>
+#include <boost/atomic/detail/bitwise_cast.hpp>
#include <boost/atomic/detail/operations_fwd.hpp>
#ifdef BOOST_HAS_PRAGMA_ONCE
@@ -87,7 +87,7 @@ public:
typedef typename operations::storage_type storage_type;
protected:
- storage_type m_storage;
+ typename operations::aligned_storage_type m_storage;
public:
BOOST_DEFAULTED_FUNCTION(base_atomic(), {})
@@ -99,7 +99,7 @@ public:
BOOST_ASSERT(order != memory_order_acquire);
BOOST_ASSERT(order != memory_order_acq_rel);
- operations::store(m_storage, static_cast< storage_type >(v), order);
+ operations::store(m_storage.value, static_cast< storage_type >(v), order);
}
BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
@@ -107,22 +107,22 @@ public:
BOOST_ASSERT(order != memory_order_release);
BOOST_ASSERT(order != memory_order_acq_rel);
- return static_cast< value_type >(operations::load(m_storage, order));
+ return static_cast< value_type >(operations::load(m_storage.value, order));
}
BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return static_cast< value_type >(operations::fetch_add(m_storage, static_cast< storage_type >(v), order));
+ return static_cast< value_type >(operations::fetch_add(m_storage.value, static_cast< storage_type >(v), order));
}
BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return static_cast< value_type >(operations::fetch_sub(m_storage, static_cast< storage_type >(v), order));
+ return static_cast< value_type >(operations::fetch_sub(m_storage.value, static_cast< storage_type >(v), order));
}
BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return static_cast< value_type >(operations::exchange(m_storage, static_cast< storage_type >(v), order));
+ return static_cast< value_type >(operations::exchange(m_storage.value, static_cast< storage_type >(v), order));
}
BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
@@ -132,7 +132,7 @@ public:
BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
storage_type old_value = static_cast< storage_type >(expected);
- const bool res = operations::compare_exchange_strong(m_storage, old_value, static_cast< storage_type >(desired), success_order, failure_order);
+ const bool res = operations::compare_exchange_strong(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order);
expected = static_cast< value_type >(old_value);
return res;
}
@@ -149,7 +149,7 @@ public:
BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
storage_type old_value = static_cast< storage_type >(expected);
- const bool res = operations::compare_exchange_weak(m_storage, old_value, static_cast< storage_type >(desired), success_order, failure_order);
+ const bool res = operations::compare_exchange_weak(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order);
expected = static_cast< value_type >(old_value);
return res;
}
@@ -161,22 +161,22 @@ public:
BOOST_FORCEINLINE value_type fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return static_cast< value_type >(operations::fetch_and(m_storage, static_cast< storage_type >(v), order));
+ return static_cast< value_type >(operations::fetch_and(m_storage.value, static_cast< storage_type >(v), order));
}
BOOST_FORCEINLINE value_type fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return static_cast< value_type >(operations::fetch_or(m_storage, static_cast< storage_type >(v), order));
+ return static_cast< value_type >(operations::fetch_or(m_storage.value, static_cast< storage_type >(v), order));
}
BOOST_FORCEINLINE value_type fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return static_cast< value_type >(operations::fetch_xor(m_storage, static_cast< storage_type >(v), order));
+ return static_cast< value_type >(operations::fetch_xor(m_storage.value, static_cast< storage_type >(v), order));
}
BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
{
- return operations::is_lock_free(m_storage);
+ return operations::is_lock_free(m_storage.value);
}
BOOST_FORCEINLINE value_type operator++(int) volatile BOOST_NOEXCEPT
@@ -243,7 +243,7 @@ public:
typedef operations::storage_type storage_type;
protected:
- storage_type m_storage;
+ operations::aligned_storage_type m_storage;
public:
BOOST_DEFAULTED_FUNCTION(base_atomic(), {})
@@ -255,7 +255,7 @@ public:
BOOST_ASSERT(order != memory_order_acquire);
BOOST_ASSERT(order != memory_order_acq_rel);
- operations::store(m_storage, static_cast< storage_type >(v), order);
+ operations::store(m_storage.value, static_cast< storage_type >(v), order);
}
BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
@@ -263,12 +263,12 @@ public:
BOOST_ASSERT(order != memory_order_release);
BOOST_ASSERT(order != memory_order_acq_rel);
- return !!operations::load(m_storage, order);
+ return !!operations::load(m_storage.value, order);
}
BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return !!operations::exchange(m_storage, static_cast< storage_type >(v), order);
+ return !!operations::exchange(m_storage.value, static_cast< storage_type >(v), order);
}
BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
@@ -278,7 +278,7 @@ public:
BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
storage_type old_value = static_cast< storage_type >(expected);
- const bool res = operations::compare_exchange_strong(m_storage, old_value, static_cast< storage_type >(desired), success_order, failure_order);
+ const bool res = operations::compare_exchange_strong(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order);
expected = !!old_value;
return res;
}
@@ -295,7 +295,7 @@ public:
BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
storage_type old_value = static_cast< storage_type >(expected);
- const bool res = operations::compare_exchange_weak(m_storage, old_value, static_cast< storage_type >(desired), success_order, failure_order);
+ const bool res = operations::compare_exchange_weak(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order);
expected = !!old_value;
return res;
}
@@ -307,7 +307,7 @@ public:
BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
{
- return operations::is_lock_free(m_storage);
+ return operations::is_lock_free(m_storage.value);
}
BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&))
@@ -330,10 +330,10 @@ public:
typedef typename operations::storage_type storage_type;
protected:
- storage_type m_storage;
+ typename operations::aligned_storage_type m_storage;
public:
- BOOST_FORCEINLINE explicit base_atomic(value_type const& v = value_type()) BOOST_NOEXCEPT : m_storage(atomics::detail::memcpy_cast< storage_type >(v))
+ BOOST_FORCEINLINE explicit base_atomic(value_type const& v = value_type()) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_cast< storage_type >(v))
{
}
@@ -343,7 +343,7 @@ public:
BOOST_ASSERT(order != memory_order_acquire);
BOOST_ASSERT(order != memory_order_acq_rel);
- operations::store(m_storage, atomics::detail::memcpy_cast< storage_type >(v), order);
+ operations::store(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order);
}
BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
@@ -351,12 +351,12 @@ public:
BOOST_ASSERT(order != memory_order_release);
BOOST_ASSERT(order != memory_order_acq_rel);
- return atomics::detail::memcpy_cast< value_type >(operations::load(m_storage, order));
+ return atomics::detail::bitwise_cast< value_type >(operations::load(m_storage.value, order));
}
BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return atomics::detail::memcpy_cast< value_type >(operations::exchange(m_storage, atomics::detail::memcpy_cast< storage_type >(v), order));
+ return atomics::detail::bitwise_cast< value_type >(operations::exchange(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order));
}
BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
@@ -365,9 +365,9 @@ public:
BOOST_ASSERT(failure_order != memory_order_acq_rel);
BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
- storage_type old_value = atomics::detail::memcpy_cast< storage_type >(expected);
- const bool res = operations::compare_exchange_strong(m_storage, old_value, atomics::detail::memcpy_cast< storage_type >(desired), success_order, failure_order);
- expected = atomics::detail::memcpy_cast< value_type >(old_value);
+ storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_strong(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
+ expected = atomics::detail::bitwise_cast< value_type >(old_value);
return res;
}
@@ -382,9 +382,9 @@ public:
BOOST_ASSERT(failure_order != memory_order_acq_rel);
BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
- storage_type old_value = atomics::detail::memcpy_cast< storage_type >(expected);
- const bool res = operations::compare_exchange_weak(m_storage, old_value, atomics::detail::memcpy_cast< storage_type >(desired), success_order, failure_order);
- expected = atomics::detail::memcpy_cast< value_type >(old_value);
+ storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_weak(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
+ expected = atomics::detail::bitwise_cast< value_type >(old_value);
return res;
}
@@ -395,7 +395,7 @@ public:
BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
{
- return operations::is_lock_free(m_storage);
+ return operations::is_lock_free(m_storage.value);
}
BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&))
@@ -419,11 +419,11 @@ public:
typedef typename operations::storage_type storage_type;
protected:
- storage_type m_storage;
+ typename operations::aligned_storage_type m_storage;
public:
BOOST_DEFAULTED_FUNCTION(base_atomic(), {})
- BOOST_FORCEINLINE explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : m_storage(atomics::detail::union_cast< storage_type >(v))
+ BOOST_FORCEINLINE explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_cast< storage_type >(v))
{
}
@@ -433,7 +433,7 @@ public:
BOOST_ASSERT(order != memory_order_acquire);
BOOST_ASSERT(order != memory_order_acq_rel);
- operations::store(m_storage, atomics::detail::union_cast< storage_type >(v), order);
+ operations::store(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order);
}
BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
@@ -441,22 +441,22 @@ public:
BOOST_ASSERT(order != memory_order_release);
BOOST_ASSERT(order != memory_order_acq_rel);
- return atomics::detail::union_cast< value_type >(operations::load(m_storage, order));
+ return atomics::detail::bitwise_cast< value_type >(operations::load(m_storage.value, order));
}
BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return atomics::detail::union_cast< value_type >(operations::fetch_add(m_storage, static_cast< storage_type >(v * sizeof(T)), order));
+ return atomics::detail::bitwise_cast< value_type >(operations::fetch_add(m_storage.value, static_cast< storage_type >(v * sizeof(T)), order));
}
BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return atomics::detail::union_cast< value_type >(operations::fetch_sub(m_storage, static_cast< storage_type >(v * sizeof(T)), order));
+ return atomics::detail::bitwise_cast< value_type >(operations::fetch_sub(m_storage.value, static_cast< storage_type >(v * sizeof(T)), order));
}
BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return atomics::detail::union_cast< value_type >(operations::exchange(m_storage, atomics::detail::union_cast< storage_type >(v), order));
+ return atomics::detail::bitwise_cast< value_type >(operations::exchange(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order));
}
BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
@@ -465,9 +465,9 @@ public:
BOOST_ASSERT(failure_order != memory_order_acq_rel);
BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
- storage_type old_value = atomics::detail::union_cast< storage_type >(expected);
- const bool res = operations::compare_exchange_strong(m_storage, old_value, atomics::detail::union_cast< storage_type >(desired), success_order, failure_order);
- expected = atomics::detail::union_cast< value_type >(old_value);
+ storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_strong(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
+ expected = atomics::detail::bitwise_cast< value_type >(old_value);
return res;
}
@@ -482,9 +482,9 @@ public:
BOOST_ASSERT(failure_order != memory_order_acq_rel);
BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
- storage_type old_value = atomics::detail::union_cast< storage_type >(expected);
- const bool res = operations::compare_exchange_weak(m_storage, old_value, atomics::detail::union_cast< storage_type >(desired), success_order, failure_order);
- expected = atomics::detail::union_cast< value_type >(old_value);
+ storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_weak(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
+ expected = atomics::detail::bitwise_cast< value_type >(old_value);
return res;
}
@@ -495,7 +495,7 @@ public:
BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
{
- return operations::is_lock_free(m_storage);
+ return operations::is_lock_free(m_storage.value);
}
BOOST_FORCEINLINE value_type operator++(int) volatile BOOST_NOEXCEPT
@@ -549,11 +549,11 @@ public:
typedef operations::storage_type storage_type;
protected:
- storage_type m_storage;
+ operations::aligned_storage_type m_storage;
public:
BOOST_DEFAULTED_FUNCTION(base_atomic(), {})
- BOOST_FORCEINLINE explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : m_storage(atomics::detail::union_cast< storage_type >(v))
+ BOOST_FORCEINLINE explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_cast< storage_type >(v))
{
}
@@ -563,7 +563,7 @@ public:
BOOST_ASSERT(order != memory_order_acquire);
BOOST_ASSERT(order != memory_order_acq_rel);
- operations::store(m_storage, atomics::detail::union_cast< storage_type >(v), order);
+ operations::store(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order);
}
BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
@@ -571,22 +571,22 @@ public:
BOOST_ASSERT(order != memory_order_release);
BOOST_ASSERT(order != memory_order_acq_rel);
- return atomics::detail::union_cast< value_type >(operations::load(m_storage, order));
+ return atomics::detail::bitwise_cast< value_type >(operations::load(m_storage.value, order));
}
BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return atomics::detail::union_cast< value_type >(operations::fetch_add(m_storage, static_cast< storage_type >(v), order));
+ return atomics::detail::bitwise_cast< value_type >(operations::fetch_add(m_storage.value, static_cast< storage_type >(v), order));
}
BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return atomics::detail::union_cast< value_type >(operations::fetch_sub(m_storage, static_cast< storage_type >(v), order));
+ return atomics::detail::bitwise_cast< value_type >(operations::fetch_sub(m_storage.value, static_cast< storage_type >(v), order));
}
BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
{
- return atomics::detail::union_cast< value_type >(operations::exchange(m_storage, atomics::detail::union_cast< storage_type >(v), order));
+ return atomics::detail::bitwise_cast< value_type >(operations::exchange(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order));
}
BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
@@ -595,9 +595,9 @@ public:
BOOST_ASSERT(failure_order != memory_order_acq_rel);
BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
- storage_type old_value = atomics::detail::union_cast< storage_type >(expected);
- const bool res = operations::compare_exchange_strong(m_storage, old_value, atomics::detail::union_cast< storage_type >(desired), success_order, failure_order);
- expected = atomics::detail::union_cast< value_type >(old_value);
+ storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_strong(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
+ expected = atomics::detail::bitwise_cast< value_type >(old_value);
return res;
}
@@ -612,9 +612,9 @@ public:
BOOST_ASSERT(failure_order != memory_order_acq_rel);
BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
- storage_type old_value = atomics::detail::union_cast< storage_type >(expected);
- const bool res = operations::compare_exchange_weak(m_storage, old_value, atomics::detail::union_cast< storage_type >(desired), success_order, failure_order);
- expected = atomics::detail::union_cast< value_type >(old_value);
+ storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
+ const bool res = operations::compare_exchange_weak(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
+ expected = atomics::detail::bitwise_cast< value_type >(old_value);
return res;
}
@@ -625,7 +625,7 @@ public:
BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
{
- return operations::is_lock_free(m_storage);
+ return operations::is_lock_free(m_storage.value);
}
BOOST_FORCEINLINE value_type operator++(int) volatile BOOST_NOEXCEPT
@@ -696,10 +696,10 @@ public:
return this->load();
}
- BOOST_FORCEINLINE storage_type& storage() BOOST_NOEXCEPT { return this->m_storage; }
- BOOST_FORCEINLINE storage_type volatile& storage() volatile BOOST_NOEXCEPT { return this->m_storage; }
- BOOST_FORCEINLINE storage_type const& storage() const BOOST_NOEXCEPT { return this->m_storage; }
- BOOST_FORCEINLINE storage_type const volatile& storage() const volatile BOOST_NOEXCEPT { return this->m_storage; }
+ BOOST_FORCEINLINE storage_type& storage() BOOST_NOEXCEPT { return this->m_storage.value; }
+ BOOST_FORCEINLINE storage_type volatile& storage() volatile BOOST_NOEXCEPT { return this->m_storage.value; }
+ BOOST_FORCEINLINE storage_type const& storage() const BOOST_NOEXCEPT { return this->m_storage.value; }
+ BOOST_FORCEINLINE storage_type const volatile& storage() const volatile BOOST_NOEXCEPT { return this->m_storage.value; }
BOOST_DELETED_FUNCTION(atomic(atomic const&))
BOOST_DELETED_FUNCTION(atomic& operator= (atomic const&))
diff --git a/boost/atomic/detail/casts.hpp b/boost/atomic/detail/bitwise_cast.hpp
index db28bc25ff..8654d10b95 100644
--- a/boost/atomic/detail/casts.hpp
+++ b/boost/atomic/detail/bitwise_cast.hpp
@@ -8,16 +8,18 @@
* Copyright (c) 2013 - 2014 Andrey Semashev
*/
/*!
- * \file atomic/detail/casts.hpp
+ * \file atomic/detail/bitwise_cast.hpp
*
- * This header defines \c union_cast and \c memcpy_cast used to convert between storage and value types
+ * This header defines \c bitwise_cast used to convert between storage and value types
*/
-#ifndef BOOST_ATOMIC_DETAIL_CASTS_HPP_INCLUDED_
-#define BOOST_ATOMIC_DETAIL_CASTS_HPP_INCLUDED_
+#ifndef BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_
-#include <cstring>
#include <boost/atomic/detail/config.hpp>
+#if !defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY)
+#include <cstring>
+#endif
#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
@@ -28,27 +30,14 @@ namespace atomics {
namespace detail {
template< typename To, typename From >
-BOOST_FORCEINLINE To union_cast(From const& from) BOOST_NOEXCEPT
-{
- union
- {
- To as_to;
- From as_from;
- }
- caster = {};
- caster.as_from = from;
- return caster.as_to;
-}
-
-template< typename To, typename From >
-BOOST_FORCEINLINE To memcpy_cast(From const& from) BOOST_NOEXCEPT
+BOOST_FORCEINLINE To bitwise_cast(From const& from) BOOST_NOEXCEPT
{
struct
{
To to;
}
value = {};
- std::memcpy
+ BOOST_ATOMIC_DETAIL_MEMCPY
(
&reinterpret_cast< char& >(value.to),
&reinterpret_cast< const char& >(from),
@@ -61,4 +50,4 @@ BOOST_FORCEINLINE To memcpy_cast(From const& from) BOOST_NOEXCEPT
} // namespace atomics
} // namespace boost
-#endif // BOOST_ATOMIC_DETAIL_CASTS_HPP_INCLUDED_
+#endif // BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_
diff --git a/boost/atomic/detail/caps_gcc_ppc.hpp b/boost/atomic/detail/caps_gcc_ppc.hpp
index 6dbdde826d..ee2346081b 100644
--- a/boost/atomic/detail/caps_gcc_ppc.hpp
+++ b/boost/atomic/detail/caps_gcc_ppc.hpp
@@ -25,7 +25,7 @@
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
-#if defined(__powerpc64__)
+#if defined(__powerpc64__) || defined(__PPC64__)
#define BOOST_ATOMIC_INT64_LOCK_FREE 2
#endif
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
diff --git a/boost/atomic/detail/config.hpp b/boost/atomic/detail/config.hpp
index 6b0e418693..489281c2b4 100644
--- a/boost/atomic/detail/config.hpp
+++ b/boost/atomic/detail/config.hpp
@@ -21,6 +21,30 @@
#pragma once
#endif
+#if defined(__has_builtin)
+#if __has_builtin(__builtin_memcpy)
+#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY
+#endif
+#if __has_builtin(__builtin_memcmp)
+#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCMP
+#endif
+#elif defined(BOOST_GCC)
+#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY
+#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCMP
+#endif
+
+#if defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY)
+#define BOOST_ATOMIC_DETAIL_MEMCPY __builtin_memcpy
+#else
+#define BOOST_ATOMIC_DETAIL_MEMCPY std::memcpy
+#endif
+
+#if defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCMP)
+#define BOOST_ATOMIC_DETAIL_MEMCMP __builtin_memcmp
+#else
+#define BOOST_ATOMIC_DETAIL_MEMCMP std::memcmp
+#endif
+
#if defined(__CUDACC__)
// nvcc does not support alternatives in asm statement constraints
#define BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES
@@ -36,4 +60,16 @@
#define BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA
#endif
+#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) < 403)
+// This macro indicates we're using older binutils that don't support implied zero displacements for memory opereands,
+// making code like this invalid:
+// movl 4+(%%edx), %%eax
+#define BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS
+#endif
+
+#if defined(__clang__) || (defined(BOOST_GCC) && (BOOST_GCC+0) < 40500)
+// This macro indicates that the compiler does not support allocating rax:rdx register pairs ("A") in asm blocks
+#define BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS
+#endif
+
#endif // BOOST_ATOMIC_DETAIL_CONFIG_HPP_INCLUDED_
diff --git a/boost/atomic/detail/int_sizes.hpp b/boost/atomic/detail/int_sizes.hpp
index d06ed42a11..eada4fff07 100644
--- a/boost/atomic/detail/int_sizes.hpp
+++ b/boost/atomic/detail/int_sizes.hpp
@@ -117,8 +117,8 @@
#include <wchar.h>
#include <boost/cstdint.hpp>
-#if defined(_MSC_VER) && _MSC_VER <= 1310
-// MSVC 7.1 defines WCHAR_MAX to a value not suitable for constant expressions
+ #if defined(_MSC_VER) && ( _MSC_VER <= 1310 || defined(UNDER_CE) && _MSC_VER <= 1500 )
+// MSVC 7.1 and MSVC 8 (arm) define WCHAR_MAX to a value not suitable for constant expressions
#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 2
#elif (WCHAR_MAX + 0) == 0xff || (WCHAR_MAX + 0) == 0x7f
#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 1
diff --git a/boost/atomic/detail/operations_fwd.hpp b/boost/atomic/detail/operations_fwd.hpp
index 69049e4630..efd4970747 100644
--- a/boost/atomic/detail/operations_fwd.hpp
+++ b/boost/atomic/detail/operations_fwd.hpp
@@ -14,6 +14,7 @@
#ifndef BOOST_ATOMIC_DETAIL_OPERATIONS_FWD_HPP_INCLUDED_
#define BOOST_ATOMIC_DETAIL_OPERATIONS_FWD_HPP_INCLUDED_
+#include <cstddef>
#include <boost/atomic/detail/config.hpp>
#ifdef BOOST_HAS_PRAGMA_ONCE
@@ -24,7 +25,7 @@ namespace boost {
namespace atomics {
namespace detail {
-template< unsigned int Size, bool Signed >
+template< std::size_t Size, bool Signed >
struct operations;
} // namespace detail
diff --git a/boost/atomic/detail/ops_cas_based.hpp b/boost/atomic/detail/ops_cas_based.hpp
index 7f8d288f7f..504cedb70f 100644
--- a/boost/atomic/detail/ops_cas_based.hpp
+++ b/boost/atomic/detail/ops_cas_based.hpp
@@ -16,6 +16,7 @@
#include <boost/memory_order.hpp>
#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
@@ -26,6 +27,21 @@ namespace atomics {
namespace detail {
template< typename Base >
+struct cas_based_exchange :
+ public Base
+{
+ typedef typename Base::storage_type storage_type;
+
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+ storage_type old_val;
+ atomics::detail::non_atomic_load(storage, old_val);
+ while (!Base::compare_exchange_weak(storage, old_val, v, order, memory_order_relaxed)) {}
+ return old_val;
+ }
+};
+
+template< typename Base >
struct cas_based_operations :
public Base
{
@@ -33,49 +49,47 @@ struct cas_based_operations :
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
- storage_type old_val = Base::load(storage, memory_order_relaxed);
+ storage_type old_val;
+ atomics::detail::non_atomic_load(storage, old_val);
while (!Base::compare_exchange_weak(storage, old_val, old_val + v, order, memory_order_relaxed)) {}
return old_val;
}
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
- storage_type old_val = Base::load(storage, memory_order_relaxed);
+ storage_type old_val;
+ atomics::detail::non_atomic_load(storage, old_val);
while (!Base::compare_exchange_weak(storage, old_val, old_val - v, order, memory_order_relaxed)) {}
return old_val;
}
- static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
- {
- storage_type old_val = Base::load(storage, memory_order_relaxed);
- while (!Base::compare_exchange_weak(storage, old_val, v, order, memory_order_relaxed)) {}
- return old_val;
- }
-
static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
- storage_type old_val = Base::load(storage, memory_order_relaxed);
+ storage_type old_val;
+ atomics::detail::non_atomic_load(storage, old_val);
while (!Base::compare_exchange_weak(storage, old_val, old_val & v, order, memory_order_relaxed)) {}
return old_val;
}
static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
- storage_type old_val = Base::load(storage, memory_order_relaxed);
+ storage_type old_val;
+ atomics::detail::non_atomic_load(storage, old_val);
while (!Base::compare_exchange_weak(storage, old_val, old_val | v, order, memory_order_relaxed)) {}
return old_val;
}
static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
- storage_type old_val = Base::load(storage, memory_order_relaxed);
+ storage_type old_val;
+ atomics::detail::non_atomic_load(storage, old_val);
while (!Base::compare_exchange_weak(storage, old_val, old_val ^ v, order, memory_order_relaxed)) {}
return old_val;
}
static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
{
- return !!exchange(storage, (storage_type)1, order);
+ return !!Base::exchange(storage, (storage_type)1, order);
}
static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
diff --git a/boost/atomic/detail/ops_emulated.hpp b/boost/atomic/detail/ops_emulated.hpp
index 597490f2d7..0dc4e6828a 100644
--- a/boost/atomic/detail/ops_emulated.hpp
+++ b/boost/atomic/detail/ops_emulated.hpp
@@ -14,6 +14,7 @@
#ifndef BOOST_ATOMIC_DETAIL_OPS_EMULATED_HPP_INCLUDED_
#define BOOST_ATOMIC_DETAIL_OPS_EMULATED_HPP_INCLUDED_
+#include <cstddef>
#include <boost/memory_order.hpp>
#include <boost/atomic/detail/config.hpp>
#include <boost/atomic/detail/storage_type.hpp>
@@ -90,7 +91,17 @@ struct emulated_operations
static BOOST_FORCEINLINE bool compare_exchange_weak(
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
{
- return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
+ // Note: This function is the exact copy of compare_exchange_strong. The reason we're not just forwarding the call
+ // is that MSVC-12 ICEs in this case.
+ storage_type& s = const_cast< storage_type& >(storage);
+ lockpool::scoped_lock lock(&storage);
+ storage_type old_val = s;
+ const bool res = old_val == expected;
+ if (res)
+ s = desired;
+ expected = old_val;
+
+ return res;
}
static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
@@ -136,10 +147,11 @@ struct emulated_operations
}
};
-template< unsigned int Size, bool Signed >
+template< std::size_t Size, bool Signed >
struct operations :
public emulated_operations< typename make_storage_type< Size, Signed >::type >
{
+ typedef typename make_storage_type< Size, Signed >::aligned aligned_storage_type;
};
} // namespace detail
diff --git a/boost/atomic/detail/ops_extending_cas_based.hpp b/boost/atomic/detail/ops_extending_cas_based.hpp
index d7f3c5f5de..3f21031f12 100644
--- a/boost/atomic/detail/ops_extending_cas_based.hpp
+++ b/boost/atomic/detail/ops_extending_cas_based.hpp
@@ -14,6 +14,7 @@
#ifndef BOOST_ATOMIC_DETAIL_OPS_EXTENDING_CAS_BASED_HPP_INCLUDED_
#define BOOST_ATOMIC_DETAIL_OPS_EXTENDING_CAS_BASED_HPP_INCLUDED_
+#include <cstddef>
#include <boost/memory_order.hpp>
#include <boost/atomic/detail/config.hpp>
#include <boost/atomic/detail/storage_type.hpp>
@@ -26,7 +27,7 @@ namespace boost {
namespace atomics {
namespace detail {
-template< typename Base, unsigned int Size, bool Signed >
+template< typename Base, std::size_t Size, bool Signed >
struct extending_cas_based_operations :
public Base
{
@@ -35,7 +36,8 @@ struct extending_cas_based_operations :
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
- storage_type old_val = Base::load(storage, memory_order_relaxed);
+ storage_type old_val;
+ atomics::detail::non_atomic_load(storage, old_val);
emulated_storage_type new_val;
do
{
@@ -47,7 +49,8 @@ struct extending_cas_based_operations :
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
- storage_type old_val = Base::load(storage, memory_order_relaxed);
+ storage_type old_val;
+ atomics::detail::non_atomic_load(storage, old_val);
emulated_storage_type new_val;
do
{
diff --git a/boost/atomic/detail/ops_gcc_alpha.hpp b/boost/atomic/detail/ops_gcc_alpha.hpp
index 6978c7f1c4..3c0e258ceb 100644
--- a/boost/atomic/detail/ops_gcc_alpha.hpp
+++ b/boost/atomic/detail/ops_gcc_alpha.hpp
@@ -88,6 +88,7 @@ struct operations< 4u, Signed > :
public gcc_alpha_operations_base
{
typedef typename make_storage_type< 4u, Signed >::type storage_type;
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
@@ -599,6 +600,7 @@ struct operations< 8u, Signed > :
public gcc_alpha_operations_base
{
typedef typename make_storage_type< 8u, Signed >::type storage_type;
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
diff --git a/boost/atomic/detail/ops_gcc_arm.hpp b/boost/atomic/detail/ops_gcc_arm.hpp
index a28da6919d..d2c2f39a2c 100644
--- a/boost/atomic/detail/ops_gcc_arm.hpp
+++ b/boost/atomic/detail/ops_gcc_arm.hpp
@@ -156,6 +156,7 @@ struct operations< 4u, Signed > :
public gcc_arm_operations_base
{
typedef typename make_storage_type< 4u, Signed >::type storage_type;
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
@@ -677,6 +678,7 @@ struct operations< 8u, Signed > :
public gcc_arm_operations_base
{
typedef typename make_storage_type< 8u, Signed >::type storage_type;
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
diff --git a/boost/atomic/detail/ops_gcc_atomic.hpp b/boost/atomic/detail/ops_gcc_atomic.hpp
index 2e4c37bec7..573a695d08 100644
--- a/boost/atomic/detail/ops_gcc_atomic.hpp
+++ b/boost/atomic/detail/ops_gcc_atomic.hpp
@@ -180,6 +180,7 @@ template< bool Signed >
struct operations< 16u, Signed > :
public gcc_atomic_operations< typename make_storage_type< 16u, Signed >::type >
{
+ typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type;
};
#endif
@@ -208,6 +209,7 @@ template< bool Signed >
struct operations< 8u, Signed > :
public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 16u, Signed >::type >, 8u, Signed >
{
+ typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type;
};
#else
@@ -216,6 +218,7 @@ template< bool Signed >
struct operations< 8u, Signed > :
public gcc_atomic_operations< typename make_storage_type< 8u, Signed >::type >
{
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
};
#endif
@@ -236,6 +239,7 @@ template< bool Signed >
struct operations< 4u, Signed > :
public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 8u, Signed >::type >, 4u, Signed >
{
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
};
#else // !defined(BOOST_ATOMIC_DETAIL_INT64_EXTENDED)
@@ -244,6 +248,7 @@ template< bool Signed >
struct operations< 4u, Signed > :
public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 16u, Signed >::type >, 4u, Signed >
{
+ typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type;
};
#endif // !defined(BOOST_ATOMIC_DETAIL_INT64_EXTENDED)
@@ -254,6 +259,7 @@ template< bool Signed >
struct operations< 4u, Signed > :
public gcc_atomic_operations< typename make_storage_type< 4u, Signed >::type >
{
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
};
#endif
@@ -274,6 +280,7 @@ template< bool Signed >
struct operations< 2u, Signed > :
public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 4u, Signed >::type >, 2u, Signed >
{
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
};
#elif !defined(BOOST_ATOMIC_DETAIL_INT64_EXTENDED)
@@ -282,6 +289,7 @@ template< bool Signed >
struct operations< 2u, Signed > :
public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 8u, Signed >::type >, 2u, Signed >
{
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
};
#else
@@ -290,6 +298,7 @@ template< bool Signed >
struct operations< 2u, Signed > :
public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 16u, Signed >::type >, 2u, Signed >
{
+ typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type;
};
#endif
@@ -300,6 +309,7 @@ template< bool Signed >
struct operations< 2u, Signed > :
public gcc_atomic_operations< typename make_storage_type< 2u, Signed >::type >
{
+ typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type;
};
#endif
@@ -320,6 +330,7 @@ template< bool Signed >
struct operations< 1u, Signed > :
public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 2u, Signed >::type >, 1u, Signed >
{
+ typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type;
};
#elif !defined(BOOST_ATOMIC_DETAIL_INT32_EXTENDED)
@@ -328,6 +339,7 @@ template< bool Signed >
struct operations< 1u, Signed > :
public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 4u, Signed >::type >, 1u, Signed >
{
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
};
#elif !defined(BOOST_ATOMIC_DETAIL_INT64_EXTENDED)
@@ -336,6 +348,7 @@ template< bool Signed >
struct operations< 1u, Signed > :
public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 8u, Signed >::type >, 1u, Signed >
{
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
};
#else
@@ -344,6 +357,7 @@ template< bool Signed >
struct operations< 1u, Signed > :
public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 16u, Signed >::type >, 1u, Signed >
{
+ typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type;
};
#endif
@@ -354,6 +368,7 @@ template< bool Signed >
struct operations< 1u, Signed > :
public gcc_atomic_operations< typename make_storage_type< 1u, Signed >::type >
{
+ typedef typename make_storage_type< 1u, Signed >::aligned aligned_storage_type;
};
#endif
diff --git a/boost/atomic/detail/ops_gcc_ppc.hpp b/boost/atomic/detail/ops_gcc_ppc.hpp
index 8698ee8d76..9131791193 100644
--- a/boost/atomic/detail/ops_gcc_ppc.hpp
+++ b/boost/atomic/detail/ops_gcc_ppc.hpp
@@ -30,6 +30,9 @@ namespace boost {
namespace atomics {
namespace detail {
+// The implementation below uses information from this document:
+// http://www.rdrop.com/users/paulmck/scalability/paper/N2745r.2010.02.19a.html
+
/*
Refer to: Motorola: "Programming Environments Manual for 32-Bit
Implementations of the PowerPC Architecture", Appendix E:
@@ -84,7 +87,7 @@ struct gcc_ppc_operations_base
{
static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT
{
-#if defined(__powerpc64__)
+#if defined(__powerpc64__) || defined(__PPC64__)
if (order == memory_order_seq_cst)
__asm__ __volatile__ ("sync" ::: "memory");
else if ((order & memory_order_release) != 0)
@@ -100,12 +103,6 @@ struct gcc_ppc_operations_base
if ((order & (memory_order_consume | memory_order_acquire)) != 0)
__asm__ __volatile__ ("isync" ::: "memory");
}
-
- static BOOST_FORCEINLINE void fence_after_store(memory_order order) BOOST_NOEXCEPT
- {
- if (order == memory_order_seq_cst)
- __asm__ __volatile__ ("sync" ::: "memory");
- }
};
@@ -114,33 +111,47 @@ struct operations< 4u, Signed > :
public gcc_ppc_operations_base
{
typedef typename make_storage_type< 4u, Signed >::type storage_type;
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
fence_before(order);
__asm__ __volatile__
(
- "stw %1, %0\n"
+ "stw %1, %0\n\t"
: "+m" (storage)
: "r" (v)
);
- fence_after_store(order);
}
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
{
storage_type v;
- __asm__ __volatile__
- (
- "lwz %0, %1\n"
- "cmpw %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=&r" (v)
- : "m" (storage)
- : "cr0"
- );
- fence_after(order);
+ if (order == memory_order_seq_cst)
+ __asm__ __volatile__ ("sync" ::: "memory");
+ if ((order & (memory_order_consume | memory_order_acquire)) != 0)
+ {
+ __asm__ __volatile__
+ (
+ "lwz %0, %1\n\t"
+ "cmpw %0, %0\n\t"
+ "bne- 1f\n\t"
+ "1:\n\t"
+ "isync\n\t"
+ : "=&r" (v)
+ : "m" (storage)
+ : "cr0", "memory"
+ );
+ }
+ else
+ {
+ __asm__ __volatile__
+ (
+ "lwz %0, %1\n\t"
+ : "=&r" (v)
+ : "m" (storage)
+ );
+ }
return v;
}
@@ -150,10 +161,10 @@ struct operations< 4u, Signed > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y1\n"
- "stwcx. %2,%y1\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y1\n\t"
+ "stwcx. %2,%y1\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "+Z" (storage)
: "b" (v)
: "cr0"
@@ -169,14 +180,14 @@ struct operations< 4u, Signed > :
fence_before(success_order);
__asm__ __volatile__
(
- "li %1, 0\n"
- "lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 1f\n"
- "stwcx. %4,%y2\n"
- "bne- 1f\n"
- "li %1, 1\n"
- "1:"
+ "li %1, 0\n\t"
+ "lwarx %0,%y2\n\t"
+ "cmpw %0, %3\n\t"
+ "bne- 1f\n\t"
+ "stwcx. %4,%y2\n\t"
+ "bne- 1f\n\t"
+ "li %1, 1\n\t"
+ "1:\n\t"
: "=&b" (expected), "=&b" (success), "+Z" (storage)
: "b" (expected), "b" (desired)
: "cr0"
@@ -195,14 +206,14 @@ struct operations< 4u, Signed > :
fence_before(success_order);
__asm__ __volatile__
(
- "li %1, 0\n"
- "0: lwarx %0,%y2\n"
- "cmpw %0, %3\n"
- "bne- 1f\n"
- "stwcx. %4,%y2\n"
- "bne- 0b\n"
- "li %1, 1\n"
- "1:"
+ "li %1, 0\n\t"
+ "0: lwarx %0,%y2\n\t"
+ "cmpw %0, %3\n\t"
+ "bne- 1f\n\t"
+ "stwcx. %4,%y2\n\t"
+ "bne- 0b\n\t"
+ "li %1, 1\n\t"
+ "1:\n\t"
: "=&b" (expected), "=&b" (success), "+Z" (storage)
: "b" (expected), "b" (desired)
: "cr0"
@@ -220,11 +231,11 @@ struct operations< 4u, Signed > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "add %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "add %1,%0,%3\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -239,11 +250,11 @@ struct operations< 4u, Signed > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "sub %1,%0,%3\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -258,11 +269,11 @@ struct operations< 4u, Signed > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "and %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "and %1,%0,%3\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -277,11 +288,11 @@ struct operations< 4u, Signed > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "or %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "or %1,%0,%3\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -296,11 +307,11 @@ struct operations< 4u, Signed > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "xor %1,%0,%3\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "xor %1,%0,%3\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -339,12 +350,12 @@ struct operations< 1u, false > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "add %1,%0,%3\n"
- "rlwinm %1, %1, 0, 0xff\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "add %1,%0,%3\n\t"
+ "rlwinm %1, %1, 0, 0xff\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -359,12 +370,12 @@ struct operations< 1u, false > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "rlwinm %1, %1, 0, 0xff\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "sub %1,%0,%3\n\t"
+ "rlwinm %1, %1, 0, 0xff\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -387,12 +398,12 @@ struct operations< 1u, true > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "add %1,%0,%3\n"
- "extsb %1, %1\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "add %1,%0,%3\n\t"
+ "extsb %1, %1\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -407,12 +418,12 @@ struct operations< 1u, true > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "extsb %1, %1\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "sub %1,%0,%3\n\t"
+ "extsb %1, %1\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -436,12 +447,12 @@ struct operations< 2u, false > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "add %1,%0,%3\n"
- "rlwinm %1, %1, 0, 0xffff\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "add %1,%0,%3\n\t"
+ "rlwinm %1, %1, 0, 0xffff\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -456,12 +467,12 @@ struct operations< 2u, false > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "rlwinm %1, %1, 0, 0xffff\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "sub %1,%0,%3\n\t"
+ "rlwinm %1, %1, 0, 0xffff\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -484,12 +495,12 @@ struct operations< 2u, true > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "add %1,%0,%3\n"
- "extsh %1, %1\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "add %1,%0,%3\n\t"
+ "extsh %1, %1\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -504,12 +515,12 @@ struct operations< 2u, true > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "lwarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "extsh %1, %1\n"
- "stwcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "lwarx %0,%y2\n\t"
+ "sub %1,%0,%3\n\t"
+ "extsh %1, %1\n\t"
+ "stwcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -520,40 +531,54 @@ struct operations< 2u, true > :
};
-#if defined(__powerpc64__)
+#if defined(__powerpc64__) || defined(__PPC64__)
template< bool Signed >
struct operations< 8u, Signed > :
public gcc_ppc_operations_base
{
typedef typename make_storage_type< 8u, Signed >::type storage_type;
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
fence_before(order);
__asm__ __volatile__
(
- "std %1, %0\n"
+ "std %1, %0\n\t"
: "+m" (storage)
: "r" (v)
);
- fence_after_store(order);
}
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
{
storage_type v;
- __asm__ __volatile__
- (
- "ld %0, %1\n"
- "cmpd %0, %0\n"
- "bne- 1f\n"
- "1:\n"
- : "=&b" (v)
- : "m" (storage)
- : "cr0"
- );
- fence_after(order);
+ if (order == memory_order_seq_cst)
+ __asm__ __volatile__ ("sync" ::: "memory");
+ if ((order & (memory_order_consume | memory_order_acquire)) != 0)
+ {
+ __asm__ __volatile__
+ (
+ "ld %0, %1\n\t"
+ "cmpd %0, %0\n\t"
+ "bne- 1f\n\t"
+ "1:\n\t"
+ "isync\n\t"
+ : "=&b" (v)
+ : "m" (storage)
+ : "cr0", "memory"
+ );
+ }
+ else
+ {
+ __asm__ __volatile__
+ (
+ "ld %0, %1\n\t"
+ : "=&b" (v)
+ : "m" (storage)
+ );
+ }
return v;
}
@@ -563,10 +588,10 @@ struct operations< 8u, Signed > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "ldarx %0,%y1\n"
- "stdcx. %2,%y1\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "ldarx %0,%y1\n\t"
+ "stdcx. %2,%y1\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "+Z" (storage)
: "b" (v)
: "cr0"
@@ -582,13 +607,13 @@ struct operations< 8u, Signed > :
fence_before(success_order);
__asm__ __volatile__
(
- "li %1, 0\n"
- "ldarx %0,%y2\n"
- "cmpd %0, %3\n"
- "bne- 1f\n"
- "stdcx. %4,%y2\n"
- "bne- 1f\n"
- "li %1, 1\n"
+ "li %1, 0\n\t"
+ "ldarx %0,%y2\n\t"
+ "cmpd %0, %3\n\t"
+ "bne- 1f\n\t"
+ "stdcx. %4,%y2\n\t"
+ "bne- 1f\n\t"
+ "li %1, 1\n\t"
"1:"
: "=&b" (expected), "=&b" (success), "+Z" (storage)
: "b" (expected), "b" (desired)
@@ -608,14 +633,14 @@ struct operations< 8u, Signed > :
fence_before(success_order);
__asm__ __volatile__
(
- "li %1, 0\n"
- "0: ldarx %0,%y2\n"
- "cmpd %0, %3\n"
- "bne- 1f\n"
- "stdcx. %4,%y2\n"
- "bne- 0b\n"
- "li %1, 1\n"
- "1:"
+ "li %1, 0\n\t"
+ "0: ldarx %0,%y2\n\t"
+ "cmpd %0, %3\n\t"
+ "bne- 1f\n\t"
+ "stdcx. %4,%y2\n\t"
+ "bne- 0b\n\t"
+ "li %1, 1\n\t"
+ "1:\n\t"
: "=&b" (expected), "=&b" (success), "+Z" (storage)
: "b" (expected), "b" (desired)
: "cr0"
@@ -633,11 +658,11 @@ struct operations< 8u, Signed > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "ldarx %0,%y2\n"
- "add %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "ldarx %0,%y2\n\t"
+ "add %1,%0,%3\n\t"
+ "stdcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -652,11 +677,11 @@ struct operations< 8u, Signed > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "ldarx %0,%y2\n"
- "sub %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "ldarx %0,%y2\n\t"
+ "sub %1,%0,%3\n\t"
+ "stdcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -671,11 +696,11 @@ struct operations< 8u, Signed > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "ldarx %0,%y2\n"
- "and %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "ldarx %0,%y2\n\t"
+ "and %1,%0,%3\n\t"
+ "stdcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -690,11 +715,11 @@ struct operations< 8u, Signed > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "ldarx %0,%y2\n"
- "or %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "ldarx %0,%y2\n\t"
+ "or %1,%0,%3\n\t"
+ "stdcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -709,11 +734,11 @@ struct operations< 8u, Signed > :
fence_before(order);
__asm__ __volatile__
(
- "1:\n"
- "ldarx %0,%y2\n"
- "xor %1,%0,%3\n"
- "stdcx. %1,%y2\n"
- "bne- 1b\n"
+ "1:\n\t"
+ "ldarx %0,%y2\n\t"
+ "xor %1,%0,%3\n\t"
+ "stdcx. %1,%y2\n\t"
+ "bne- 1b\n\t"
: "=&b" (original), "=&b" (tmp), "+Z" (storage)
: "b" (v)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
@@ -738,7 +763,7 @@ struct operations< 8u, Signed > :
}
};
-#endif // defined(__powerpc64__)
+#endif // defined(__powerpc64__) || defined(__PPC64__)
BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
@@ -747,14 +772,12 @@ BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
{
case memory_order_consume:
case memory_order_acquire:
- __asm__ __volatile__ ("isync" ::: "memory");
- break;
case memory_order_release:
-#if defined(__powerpc64__)
+ case memory_order_acq_rel:
+#if defined(__powerpc64__) || defined(__PPC64__)
__asm__ __volatile__ ("lwsync" ::: "memory");
break;
#endif
- case memory_order_acq_rel:
case memory_order_seq_cst:
__asm__ __volatile__ ("sync" ::: "memory");
break;
@@ -765,7 +788,11 @@ BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT
BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT
{
if (order != memory_order_relaxed)
+#if defined(__ibmxl__) || defined(__IBMCPP__)
+ __fence();
+#else
__asm__ __volatile__ ("" ::: "memory");
+#endif
}
} // namespace detail
diff --git a/boost/atomic/detail/ops_gcc_sparc.hpp b/boost/atomic/detail/ops_gcc_sparc.hpp
index ea6df91dc6..020882bbfa 100644
--- a/boost/atomic/detail/ops_gcc_sparc.hpp
+++ b/boost/atomic/detail/ops_gcc_sparc.hpp
@@ -62,6 +62,7 @@ struct gcc_sparc_cas32 :
public gcc_sparc_cas_base
{
typedef typename make_storage_type< 4u, Signed >::type storage_type;
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
@@ -104,19 +105,6 @@ struct gcc_sparc_cas32 :
return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
}
- static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
- {
- return true;
- }
-};
-
-template< bool Signed >
-struct operations< 4u, Signed > :
- public cas_based_operations< gcc_sparc_cas32< Signed > >
-{
- typedef cas_based_operations< gcc_sparc_cas32< Signed > > base_type;
- typedef typename base_type::storage_type storage_type;
-
static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
base_type::fence_before(order);
@@ -131,13 +119,19 @@ struct operations< 4u, Signed > :
return v;
}
- static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+ static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
{
- return !!exchange(storage, (storage_type)1, order);
+ return true;
}
};
template< bool Signed >
+struct operations< 4u, Signed > :
+ public cas_based_operations< gcc_sparc_cas32< Signed > >
+{
+};
+
+template< bool Signed >
struct operations< 1u, Signed > :
public extending_cas_based_operations< operations< 4u, Signed >, 1u, Signed >
{
@@ -154,6 +148,7 @@ struct gcc_sparc_cas64 :
public gcc_sparc_cas_base
{
typedef typename make_storage_type< 8u, Signed >::type storage_type;
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
@@ -204,7 +199,7 @@ struct gcc_sparc_cas64 :
template< bool Signed >
struct operations< 8u, Signed > :
- public cas_based_operations< gcc_sparc_cas64< Signed > >
+ public cas_based_operations< cas_based_exchange< gcc_sparc_cas64< Signed > > >
{
};
diff --git a/boost/atomic/detail/ops_gcc_sync.hpp b/boost/atomic/detail/ops_gcc_sync.hpp
index f4fc3331c6..87f2f53029 100644
--- a/boost/atomic/detail/ops_gcc_sync.hpp
+++ b/boost/atomic/detail/ops_gcc_sync.hpp
@@ -165,6 +165,17 @@ struct operations< 1u, Signed > :
public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >, 1u, Signed >
#endif
{
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1)
+ typedef typename make_storage_type< 1u, Signed >::aligned aligned_storage_type;
+#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2)
+ typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type;
+#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
+#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
+#else
+ typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type;
+#endif
};
#endif
@@ -181,6 +192,15 @@ struct operations< 2u, Signed > :
public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >, 2u, Signed >
#endif
{
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2)
+ typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type;
+#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
+#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
+#else
+ typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type;
+#endif
};
#endif
@@ -195,6 +215,13 @@ struct operations< 4u, Signed > :
public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >, 4u, Signed >
#endif
{
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
+#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
+#else
+ typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type;
+#endif
};
#endif
@@ -207,6 +234,11 @@ struct operations< 8u, Signed > :
public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >, 8u, Signed >
#endif
{
+#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
+#else
+ typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type;
+#endif
};
#endif
@@ -215,6 +247,7 @@ template< bool Signed >
struct operations< 16u, Signed > :
public gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >
{
+ typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type;
};
#endif
diff --git a/boost/atomic/detail/ops_gcc_x86.hpp b/boost/atomic/detail/ops_gcc_x86.hpp
index 6e600457aa..f68125c491 100644
--- a/boost/atomic/detail/ops_gcc_x86.hpp
+++ b/boost/atomic/detail/ops_gcc_x86.hpp
@@ -115,6 +115,7 @@ struct operations< 1u, Signed > :
{
typedef gcc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 1u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
{
@@ -201,6 +202,7 @@ struct operations< 2u, Signed > :
{
typedef gcc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
{
@@ -287,6 +289,7 @@ struct operations< 4u, Signed > :
{
typedef gcc_x86_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
{
@@ -383,6 +386,7 @@ struct operations< 8u, Signed > :
{
typedef gcc_x86_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
{
diff --git a/boost/atomic/detail/ops_gcc_x86_dcas.hpp b/boost/atomic/detail/ops_gcc_x86_dcas.hpp
index a6109f926c..f7a84f79ce 100644
--- a/boost/atomic/detail/ops_gcc_x86_dcas.hpp
+++ b/boost/atomic/detail/ops_gcc_x86_dcas.hpp
@@ -36,6 +36,7 @@ template< bool Signed >
struct gcc_dcas_x86
{
typedef typename make_storage_type< 8u, Signed >::type storage_type;
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
{
@@ -68,6 +69,37 @@ struct gcc_dcas_x86
}
else
{
+#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+#if defined(__PIC__)
+ uint32_t scratch;
+ __asm__ __volatile__
+ (
+ "movl %%ebx, %[scratch]\n\t"
+ "movl %[value_lo], %%ebx\n\t"
+ "movl %[dest], %%eax\n\t"
+ "movl 4+%[dest], %%edx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg8b %[dest]\n\t"
+ "jne 1b\n\t"
+ "movl %[scratch], %%ebx\n\t"
+ : [scratch] "=m" (scratch), [dest] "=o" (storage)
+ : [value_lo] "a" ((uint32_t)v), "c" ((uint32_t)(v >> 32))
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "edx", "memory"
+ );
+#else // defined(__PIC__)
+ __asm__ __volatile__
+ (
+ "movl %[dest], %%eax\n\t"
+ "movl 4+%[dest], %%edx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg8b %[dest]\n\t"
+ "jne 1b\n\t"
+ : [dest] "=o" (storage)
+ : [value_lo] "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32))
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "eax", "edx", "memory"
+ );
+#endif // defined(__PIC__)
+#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
#if defined(__PIC__)
uint32_t scratch;
__asm__ __volatile__
@@ -79,7 +111,7 @@ struct gcc_dcas_x86
".align 16\n\t"
"1: lock; cmpxchg8b 0(%[dest])\n\t"
"jne 1b\n\t"
- "movl %[scratch], %%ebx"
+ "movl %[scratch], %%ebx\n\t"
#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES)
: [scratch] "=m,m" (scratch)
: [value_lo] "a,a" ((uint32_t)v), "c,c" ((uint32_t)(v >> 32)), [dest] "D,S" (&storage)
@@ -89,7 +121,7 @@ struct gcc_dcas_x86
#endif
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "edx", "memory"
);
-#else
+#else // defined(__PIC__)
__asm__ __volatile__
(
"movl 0(%[dest]), %%eax\n\t"
@@ -105,7 +137,8 @@ struct gcc_dcas_x86
#endif
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "eax", "edx", "memory"
);
-#endif
+#endif // defined(__PIC__)
+#endif // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
}
}
@@ -152,7 +185,7 @@ struct gcc_dcas_x86
(
"movl %%ebx, %%eax\n\t"
"movl %%ecx, %%edx\n\t"
- "lock; cmpxchg8b %[storage]"
+ "lock; cmpxchg8b %[storage]\n\t"
: "=&A" (value)
: [storage] "m" (storage)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
@@ -191,7 +224,7 @@ struct gcc_dcas_x86
"movl %[desired_lo], %%ebx\n\t"
"lock; cmpxchg8b %[dest]\n\t"
"movl %[scratch], %%ebx\n\t"
- "sete %[success]"
+ "sete %[success]\n\t"
#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES)
: "+A,A,A,A,A,A" (expected), [dest] "+m,m,m,m,m,m" (storage), [scratch] "=m,m,m,m,m,m" (scratch), [success] "=q,m,q,m,q,m" (success)
: [desired_lo] "S,S,D,D,m,m" ((uint32_t)desired), "c,c,c,c,c,c" ((uint32_t)(desired >> 32))
@@ -207,7 +240,7 @@ struct gcc_dcas_x86
__asm__ __volatile__
(
"lock; cmpxchg8b %[dest]\n\t"
- "sete %[success]"
+ "sete %[success]\n\t"
#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES)
: "+A,A" (expected), [dest] "+m,m" (storage), [success] "=q,m" (success)
: "b,b" ((uint32_t)desired), "c,c" ((uint32_t)(desired >> 32))
@@ -227,6 +260,97 @@ struct gcc_dcas_x86
return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
}
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+#if defined(__clang__)
+ // Clang cannot allocate eax:edx register pairs but it has sync intrinsics
+ storage_type old_val = storage;
+ while (true)
+ {
+ storage_type val = __sync_val_compare_and_swap(&storage, old_val, v);
+ if (val == old_val)
+ return val;
+ old_val = val;
+ }
+#elif !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+#if defined(__PIC__)
+ uint32_t scratch;
+ __asm__ __volatile__
+ (
+ "movl %%ebx, %[scratch]\n\t"
+ "movl %%eax, %%ebx\n\t"
+ "movl %%edx, %%ecx\n\t"
+ "movl %[dest], %%eax\n\t"
+ "movl 4+%[dest], %%edx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg8b %[dest]\n\t"
+ "jne 1b\n\t"
+ "movl %[scratch], %%ebx\n\t"
+ : "+A" (v), [scratch] "=m" (scratch), [dest] "+o" (storage)
+ :
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "ecx", "memory"
+ );
+ return v;
+#else // defined(__PIC__)
+ __asm__ __volatile__
+ (
+ "movl %[dest], %%eax\n\t"
+ "movl 4+%[dest], %%edx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg8b %[dest]\n\t"
+ "jne 1b\n\t"
+ : "=A" (v), [dest] "+o" (storage)
+ : "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32))
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
+ );
+ return v;
+#endif // defined(__PIC__)
+#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+#if defined(__PIC__)
+ uint32_t scratch;
+ __asm__ __volatile__
+ (
+ "movl %%ebx, %[scratch]\n\t"
+ "movl %%eax, %%ebx\n\t"
+ "movl %%edx, %%ecx\n\t"
+ "movl 0(%[dest]), %%eax\n\t"
+ "movl 4(%[dest]), %%edx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg8b 0(%[dest])\n\t"
+ "jne 1b\n\t"
+ "movl %[scratch], %%ebx\n\t"
+#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES)
+ : "+A,A" (v), [scratch] "=m,m" (scratch)
+ : [dest] "D,S" (&storage)
+#else
+ : "+A" (v), [scratch] "=m" (scratch)
+ : [dest] "D" (&storage)
+#endif
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "ecx", "memory"
+ );
+ return v;
+#else // defined(__PIC__)
+ __asm__ __volatile__
+ (
+ "movl 0(%[dest]), %%eax\n\t"
+ "movl 4(%[dest]), %%edx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg8b 0(%[dest])\n\t"
+ "jne 1b\n\t"
+#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES)
+ : "=A,A" (v)
+ : "b,b" ((uint32_t)v), "c,c" ((uint32_t)(v >> 32)), [dest] "D,S" (&storage)
+#else
+ : "=A" (v)
+ : "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32)), [dest] "D" (&storage)
+#endif
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
+ );
+ return v;
+#endif // defined(__PIC__)
+#endif
+ }
+
static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
{
return true;
@@ -241,21 +365,36 @@ template< bool Signed >
struct gcc_dcas_x86_64
{
typedef typename make_storage_type< 16u, Signed >::type storage_type;
+ typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
{
uint64_t const* p_value = (uint64_t const*)&v;
+#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+ __asm__ __volatile__
+ (
+ "movq %[dest], %%rax\n\t"
+ "movq 8+%[dest], %%rdx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg16b %[dest]\n\t"
+ "jne 1b\n\t"
+ : [dest] "=o" (storage)
+ : "b" (p_value[0]), "c" (p_value[1])
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "rax", "rdx", "memory"
+ );
+#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
__asm__ __volatile__
(
"movq 0(%[dest]), %%rax\n\t"
"movq 8(%[dest]), %%rdx\n\t"
".align 16\n\t"
"1: lock; cmpxchg16b 0(%[dest])\n\t"
- "jne 1b"
+ "jne 1b\n\t"
:
: "b" (p_value[0]), "c" (p_value[1]), [dest] "r" (&storage)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "rax", "rdx", "memory"
);
+#endif // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
}
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order) BOOST_NOEXCEPT
@@ -264,16 +403,49 @@ struct gcc_dcas_x86_64
// Clang cannot allocate rax:rdx register pairs but it has sync intrinsics
storage_type value = storage_type();
return __sync_val_compare_and_swap(&storage, value, value);
-#else
+#elif defined(BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS)
+ // GCC 4.4 can't allocate rax:rdx register pair either but it also doesn't support 128-bit __sync_val_compare_and_swap
storage_type value;
// We don't care for comparison result here; the previous value will be stored into value anyway.
// Also we don't care for rbx and rcx values, they just have to be equal to rax and rdx before cmpxchg16b.
+#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
__asm__ __volatile__
(
"movq %%rbx, %%rax\n\t"
"movq %%rcx, %%rdx\n\t"
- "lock; cmpxchg16b %[storage]"
+ "lock; cmpxchg16b %[storage]\n\t"
+ "movq %%rax, %[value]\n\t"
+ "movq %%rdx, 8+%[value]\n\t"
+ : [value] "=o" (value)
+ : [storage] "m" (storage)
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory", "rax", "rdx"
+ );
+#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+ __asm__ __volatile__
+ (
+ "movq %%rbx, %%rax\n\t"
+ "movq %%rcx, %%rdx\n\t"
+ "lock; cmpxchg16b %[storage]\n\t"
+ "movq %%rax, 0(%[value])\n\t"
+ "movq %%rdx, 8(%[value])\n\t"
+ :
+ : [storage] "m" (storage), [value] "r" (&value)
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory", "rax", "rdx"
+ );
+#endif // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+
+ return value;
+#else // defined(BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS)
+ storage_type value;
+
+ // We don't care for comparison result here; the previous value will be stored into value anyway.
+ // Also we don't care for rbx and rcx values, they just have to be equal to rax and rdx before cmpxchg16b.
+ __asm__ __volatile__
+ (
+ "movq %%rbx, %%rax\n\t"
+ "movq %%rcx, %%rdx\n\t"
+ "lock; cmpxchg16b %[storage]\n\t"
: "=&A" (value)
: [storage] "m" (storage)
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
@@ -291,13 +463,46 @@ struct gcc_dcas_x86_64
storage_type old_expected = expected;
expected = __sync_val_compare_and_swap(&storage, old_expected, desired);
return expected == old_expected;
-#else
+#elif defined(BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS)
+ // GCC 4.4 can't allocate rax:rdx register pair either but it also doesn't support 128-bit __sync_val_compare_and_swap
+ uint64_t const* p_desired = (uint64_t const*)&desired;
+ bool success;
+#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+ __asm__ __volatile__
+ (
+ "movq %[expected], %%rax\n\t"
+ "movq 8+%[expected], %%rdx\n\t"
+ "lock; cmpxchg16b %[dest]\n\t"
+ "sete %[success]\n\t"
+ "movq %%rax, %[expected]\n\t"
+ "movq %%rdx, 8+%[expected]\n\t"
+ : [dest] "+m" (storage), [expected] "+o" (expected), [success] "=q" (success)
+ : "b" (p_desired[0]), "c" (p_desired[1])
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory", "rax", "rdx"
+ );
+#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+ __asm__ __volatile__
+ (
+ "movq 0(%[expected]), %%rax\n\t"
+ "movq 8(%[expected]), %%rdx\n\t"
+ "lock; cmpxchg16b %[dest]\n\t"
+ "sete %[success]\n\t"
+ "movq %%rax, 0(%[expected])\n\t"
+ "movq %%rdx, 8(%[expected])\n\t"
+ : [dest] "+m" (storage), [success] "=q" (success)
+ : "b" (p_desired[0]), "c" (p_desired[1]), [expected] "r" (&expected)
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory", "rax", "rdx"
+ );
+#endif // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+
+ return success;
+#else // defined(BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS)
uint64_t const* p_desired = (uint64_t const*)&desired;
bool success;
__asm__ __volatile__
(
"lock; cmpxchg16b %[dest]\n\t"
- "sete %[success]"
+ "sete %[success]\n\t"
#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES)
: "+A,A" (expected), [dest] "+m,m" (storage), [success] "=q,m" (success)
: "b,b" (p_desired[0]), "c,c" (p_desired[1])
@@ -317,6 +522,85 @@ struct gcc_dcas_x86_64
return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
}
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
+ {
+#if defined(__clang__)
+ // Clang cannot allocate eax:edx register pairs but it has sync intrinsics
+ storage_type old_val = storage;
+ while (true)
+ {
+ storage_type val = __sync_val_compare_and_swap(&storage, old_val, v);
+ if (val == old_val)
+ return val;
+ old_val = val;
+ }
+#elif defined(BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS)
+ // GCC 4.4 can't allocate rax:rdx register pair either but it also doesn't support 128-bit __sync_val_compare_and_swap
+ storage_type old_value;
+ uint64_t const* p_value = (uint64_t const*)&v;
+#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+ __asm__ __volatile__
+ (
+ "movq %[dest], %%rax\n\t"
+ "movq 8+%[dest], %%rdx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg16b %[dest]\n\t"
+ "jne 1b\n\t"
+ "movq %%rax, %[old_value]\n\t"
+ "movq %%rdx, 8+%[old_value]\n\t"
+ : [dest] "+o" (storage), [old_value] "=o" (old_value)
+ : "b" (p_value[0]), "c" (p_value[1])
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory", "rax", "rdx"
+ );
+#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+ __asm__ __volatile__
+ (
+ "movq 0(%[dest]), %%rax\n\t"
+ "movq 8(%[dest]), %%rdx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg16b 0(%[dest])\n\t"
+ "jne 1b\n\t"
+ "movq %%rax, 0(%[old_value])\n\t"
+ "movq %%rdx, 8(%[old_value])\n\t"
+ :
+ : "b" (p_value[0]), "c" (p_value[1]), [dest] "r" (&storage), [old_value] "r" (&old_value)
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory", "rax", "rdx"
+ );
+#endif // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+
+ return old_value;
+#else // defined(BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS)
+ uint64_t const* p_value = (uint64_t const*)&v;
+#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+ __asm__ __volatile__
+ (
+ "movq %[dest], %%rax\n\t"
+ "movq 8+%[dest], %%rdx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg16b %[dest]\n\t"
+ "jne 1b\n\t"
+ : "=&A" (v), [dest] "+o" (storage)
+ : "b" (p_value[0]), "c" (p_value[1])
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
+ );
+#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+ __asm__ __volatile__
+ (
+ "movq 0(%[dest]), %%rax\n\t"
+ "movq 8(%[dest]), %%rdx\n\t"
+ ".align 16\n\t"
+ "1: lock; cmpxchg16b 0(%[dest])\n\t"
+ "jne 1b\n\t"
+ : "=&A" (v)
+ : "b" (p_value[0]), "c" (p_value[1]), [dest] "r" (&storage)
+ : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
+ );
+#endif // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS)
+
+ return v;
+#endif
+ }
+
static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
{
return true;
diff --git a/boost/atomic/detail/ops_linux_arm.hpp b/boost/atomic/detail/ops_linux_arm.hpp
index 25167b1974..41713a35f5 100644
--- a/boost/atomic/detail/ops_linux_arm.hpp
+++ b/boost/atomic/detail/ops_linux_arm.hpp
@@ -87,6 +87,7 @@ struct linux_arm_cas :
public linux_arm_cas_base
{
typedef typename make_storage_type< 4u, Signed >::type storage_type;
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
@@ -142,19 +143,19 @@ struct linux_arm_cas :
template< bool Signed >
struct operations< 1u, Signed > :
- public extending_cas_based_operations< cas_based_operations< linux_arm_cas< Signed > >, 1u, Signed >
+ public extending_cas_based_operations< cas_based_operations< cas_based_exchange< linux_arm_cas< Signed > > >, 1u, Signed >
{
};
template< bool Signed >
struct operations< 2u, Signed > :
- public extending_cas_based_operations< cas_based_operations< linux_arm_cas< Signed > >, 2u, Signed >
+ public extending_cas_based_operations< cas_based_operations< cas_based_exchange< linux_arm_cas< Signed > > >, 2u, Signed >
{
};
template< bool Signed >
struct operations< 4u, Signed > :
- public cas_based_operations< linux_arm_cas< Signed > >
+ public cas_based_operations< cas_based_exchange< linux_arm_cas< Signed > > >
{
};
diff --git a/boost/atomic/detail/ops_msvc_arm.hpp b/boost/atomic/detail/ops_msvc_arm.hpp
index 349f7a5ae8..ff953d67e3 100644
--- a/boost/atomic/detail/ops_msvc_arm.hpp
+++ b/boost/atomic/detail/ops_msvc_arm.hpp
@@ -135,6 +135,7 @@ struct operations< 1u, Signed > :
{
typedef msvc_arm_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 1u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
@@ -300,6 +301,7 @@ struct operations< 2u, Signed > :
{
typedef msvc_arm_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
@@ -465,6 +467,7 @@ struct operations< 4u, Signed > :
{
typedef msvc_arm_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
@@ -630,6 +633,7 @@ struct operations< 8u, Signed > :
{
typedef msvc_arm_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
diff --git a/boost/atomic/detail/ops_msvc_x86.hpp b/boost/atomic/detail/ops_msvc_x86.hpp
index 501d9c622d..589c029864 100644
--- a/boost/atomic/detail/ops_msvc_x86.hpp
+++ b/boost/atomic/detail/ops_msvc_x86.hpp
@@ -166,6 +166,7 @@ struct operations< 4u, Signed > :
{
typedef msvc_x86_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
{
@@ -237,6 +238,7 @@ struct operations< 1u, Signed > :
{
typedef msvc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 1u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
{
@@ -281,6 +283,7 @@ struct operations< 1u, Signed > :
{
typedef msvc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 1u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
@@ -421,6 +424,7 @@ struct operations< 2u, Signed > :
{
typedef msvc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
{
@@ -465,6 +469,7 @@ struct operations< 2u, Signed > :
{
typedef msvc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > base_type;
typedef typename base_type::storage_type storage_type;
+ typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type;
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
{
@@ -604,6 +609,7 @@ template< bool Signed >
struct msvc_dcas_x86
{
typedef typename make_storage_type< 8u, Signed >::type storage_type;
+ typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type;
// Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3A, 8.1.1. Guaranteed Atomic Operations:
//
@@ -611,10 +617,12 @@ struct msvc_dcas_x86
// * Reading or writing a quadword aligned on a 64-bit boundary
//
// Luckily, the memory is almost always 8-byte aligned in our case because atomic<> uses 64 bit native types for storage and dynamic memory allocations
- // have at least 8 byte alignment. The only unfortunate case is when atomic is placeod on the stack and it is not 8-byte aligned (like on 32 bit Windows).
+ // have at least 8 byte alignment. The only unfortunate case is when atomic is placed on the stack and it is not 8-byte aligned (like on 32 bit Windows).
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
{
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
+
storage_type volatile* p = &storage;
if (((uint32_t)p & 0x00000007) == 0)
{
@@ -661,10 +669,14 @@ struct msvc_dcas_x86
mov ebx, backup
};
}
+
+ BOOST_ATOMIC_DETAIL_COMPILER_BARRIER();
}
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order) BO