From 30f4ab53e5623fcf1c0ede8d2d9536c42a5d6c8f Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Thu, 12 Dec 2013 19:32:06 +0000 Subject: [PATCH 1/8] Fix typo in macro name - should be BOOST_NO_ATOMIC_SMART_PTR. Add BOOST_NO_CXX11_HRD_ATOMIC. Regenerate docs. See https://svn.boost.org/trac/boost/ticket/8929. --- .../boost_config/boost_macro_reference.html | 14 ++- doc/html/index.html | 2 +- doc/macro_reference.qbk | 3 +- include/boost/config/stdlib/dinkumware.hpp | 4 + include/boost/config/stdlib/libcomo.hpp | 1 + include/boost/config/stdlib/libcpp.hpp | 1 + include/boost/config/stdlib/libstdcpp3.hpp | 1 + include/boost/config/stdlib/modena.hpp | 1 + include/boost/config/stdlib/msl.hpp | 1 + include/boost/config/stdlib/roguewave.hpp | 1 + include/boost/config/stdlib/sgi.hpp | 1 + include/boost/config/stdlib/stlport.hpp | 1 + include/boost/config/stdlib/vacpp.hpp | 1 + test/all/Jamfile.v2 | 15 ++-- test/boost_no_cxx11_hdr_atomic.ipp | 89 +++++++++++++++++++ test/config_info.cpp | 3 + test/config_test.cpp | 22 +++-- test/no_cxx11_hdr_atomic_fail.cpp | 37 ++++++++ test/no_cxx11_hdr_atomic_pass.cpp | 37 ++++++++ 19 files changed, 220 insertions(+), 15 deletions(-) create mode 100644 test/boost_no_cxx11_hdr_atomic.ipp create mode 100644 test/no_cxx11_hdr_atomic_fail.cpp create mode 100644 test/no_cxx11_hdr_atomic_pass.cpp diff --git a/doc/html/boost_config/boost_macro_reference.html b/doc/html/boost_config/boost_macro_reference.html index cd60c7f7..21c225ee 100644 --- a/doc/html/boost_config/boost_macro_reference.html +++ b/doc/html/boost_config/boost_macro_reference.html @@ -2404,7 +2404,7 @@

- BOOST_NO_CXX11_ATOMIC_SP + BOOST_NO_CXX11_ATOMIC_SMART_PTR

@@ -2415,6 +2415,18 @@ + +

+ BOOST_NO_CXX11_HDR_ATOMIC +

+ + +

+ The standard library does not provide header <atomic>. +

+ + +

BOOST_NO_CXX11_HDR_ARRAY diff --git a/doc/html/index.html b/doc/html/index.html index 273c21cf..cf18f912 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -951,7 +951,7 @@ - +

Last revised: September 08, 2013 at 08:51:17 GMT

Last revised: December 12, 2013 at 19:29:48 GMT


diff --git a/doc/macro_reference.qbk b/doc/macro_reference.qbk index 40123e63..f223e8bd 100644 --- a/doc/macro_reference.qbk +++ b/doc/macro_reference.qbk @@ -580,7 +580,8 @@ that are not yet supported by a particular compiler or library. [[`BOOST_NO_CXX11_ALIGNAS`][The compiler does not support the `alignas` keyword.]] [[`BOOST_NO_CXX11_ALLOCATOR`][The standard library does not provide a C++11 version of `std::allocator` in .]] -[[`BOOST_NO_CXX11_ATOMIC_SP`][The standard library does not support atomic smart pointer operations.]] +[[`BOOST_NO_CXX11_ATOMIC_SMART_PTR`][The standard library does not support atomic smart pointer operations.]] +[[`BOOST_NO_CXX11_HDR_ATOMIC`][The standard library does not provide header .]] [[`BOOST_NO_CXX11_HDR_ARRAY`][The standard library does not provide header .]] [[`BOOST_NO_CXX11_HDR_CHRONO`][The standard library does not provide header .]] [[`BOOST_NO_CXX11_HDR_CODECVT`][The standard library does not provide header .]] diff --git a/include/boost/config/stdlib/dinkumware.hpp b/include/boost/config/stdlib/dinkumware.hpp index a8b68be7..86e46718 100644 --- a/include/boost/config/stdlib/dinkumware.hpp +++ b/include/boost/config/stdlib/dinkumware.hpp @@ -135,6 +135,10 @@ # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #endif +// Not present in any version: +// +#define BOOST_NO_CXX11_HDR_ATOMIC + #ifdef _CPPLIB_VER # define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER #else diff --git a/include/boost/config/stdlib/libcomo.hpp b/include/boost/config/stdlib/libcomo.hpp index 29490f1b..d02e9e07 100644 --- a/include/boost/config/stdlib/libcomo.hpp +++ b/include/boost/config/stdlib/libcomo.hpp @@ -58,6 +58,7 @@ # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL +# define BOOST_NO_CXX11_HDR_ATOMIC // // Intrinsic type_traits support. diff --git a/include/boost/config/stdlib/libcpp.hpp b/include/boost/config/stdlib/libcpp.hpp index 3d574407..761017f2 100644 --- a/include/boost/config/stdlib/libcpp.hpp +++ b/include/boost/config/stdlib/libcpp.hpp @@ -30,6 +30,7 @@ # define BOOST_NO_CXX11_HDR_FUTURE # define BOOST_NO_CXX11_HDR_TYPE_TRAITS # define BOOST_NO_CXX11_ATOMIC_SMART_PTR +# define BOOST_NO_CXX11_HDR_ATOMIC // libc++ uses a non-standard messages_base #define BOOST_NO_STD_MESSAGES diff --git a/include/boost/config/stdlib/libstdcpp3.hpp b/include/boost/config/stdlib/libstdcpp3.hpp index 976ab76b..496e8d1b 100644 --- a/include/boost/config/stdlib/libstdcpp3.hpp +++ b/include/boost/config/stdlib/libstdcpp3.hpp @@ -155,6 +155,7 @@ // so 4.7.0 is the first truely conforming one. # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_HDR_ATOMIC #endif // C++0x headers not yet (fully!) implemented // diff --git a/include/boost/config/stdlib/modena.hpp b/include/boost/config/stdlib/modena.hpp index b483b6e0..956bffce 100644 --- a/include/boost/config/stdlib/modena.hpp +++ b/include/boost/config/stdlib/modena.hpp @@ -47,6 +47,7 @@ # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL +# define BOOST_NO_CXX11_HDR_ATOMIC #define BOOST_STDLIB "Modena C++ standard library" diff --git a/include/boost/config/stdlib/msl.hpp b/include/boost/config/stdlib/msl.hpp index 4f9a2da6..05e2582d 100644 --- a/include/boost/config/stdlib/msl.hpp +++ b/include/boost/config/stdlib/msl.hpp @@ -71,6 +71,7 @@ # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL +# define BOOST_NO_CXX11_HDR_ATOMIC #define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__) diff --git a/include/boost/config/stdlib/roguewave.hpp b/include/boost/config/stdlib/roguewave.hpp index cb80f570..72823d5d 100644 --- a/include/boost/config/stdlib/roguewave.hpp +++ b/include/boost/config/stdlib/roguewave.hpp @@ -183,4 +183,5 @@ # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL +# define BOOST_NO_CXX11_HDR_ATOMIC diff --git a/include/boost/config/stdlib/sgi.hpp b/include/boost/config/stdlib/sgi.hpp index ae9b6ad9..ed7ea613 100644 --- a/include/boost/config/stdlib/sgi.hpp +++ b/include/boost/config/stdlib/sgi.hpp @@ -141,6 +141,7 @@ # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL +# define BOOST_NO_CXX11_HDR_ATOMIC #define BOOST_STDLIB "SGI standard library" diff --git a/include/boost/config/stdlib/stlport.hpp b/include/boost/config/stdlib/stlport.hpp index bcc30b99..1b7beeb9 100644 --- a/include/boost/config/stdlib/stlport.hpp +++ b/include/boost/config/stdlib/stlport.hpp @@ -231,6 +231,7 @@ namespace boost { using std::min; using std::max; } # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL +# define BOOST_NO_CXX11_HDR_ATOMIC #define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT) diff --git a/include/boost/config/stdlib/vacpp.hpp b/include/boost/config/stdlib/vacpp.hpp index 9d169465..08268249 100644 --- a/include/boost/config/stdlib/vacpp.hpp +++ b/include/boost/config/stdlib/vacpp.hpp @@ -47,6 +47,7 @@ # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL +# define BOOST_NO_CXX11_HDR_ATOMIC #define BOOST_STDLIB "Visual Age default standard library" diff --git a/test/all/Jamfile.v2 b/test/all/Jamfile.v2 index 262d79db..ba09a333 100644 --- a/test/all/Jamfile.v2 +++ b/test/all/Jamfile.v2 @@ -1,7 +1,7 @@ # # Regression test Jamfile for boost configuration setup. # *** DO NOT EDIT THIS FILE BY HAND *** -# This file was automatically generated on Sun Apr 28 18:36:49 2013 +# This file was automatically generated on Thu Dec 12 19:09:40 2013 # by libs/config/tools/generate.cpp # Copyright John Maddock. # Use, modification and distribution are subject to the @@ -226,9 +226,6 @@ test-suite "BOOST_NO_CWCHAR" : test-suite "BOOST_NO_CWCTYPE" : [ run ../no_cwctype_pass.cpp ] [ compile-fail ../no_cwctype_fail.cpp ] ; -test-suite "BOOST_NO_CXX11_RAW_LITERALS" : -[ run ../no_raw_literals_pass.cpp ] -[ compile-fail ../no_raw_literals_fail.cpp ] ; test-suite "BOOST_NO_CXX11_ALIGNAS" : [ run ../no_cxx11_alignas_pass.cpp ] [ compile-fail ../no_cxx11_alignas_fail.cpp ] ; @@ -241,6 +238,9 @@ test-suite "BOOST_NO_CXX11_ATOMIC_SMART_PTR" : test-suite "BOOST_NO_CXX11_HDR_ARRAY" : [ run ../no_cxx11_hdr_array_pass.cpp ] [ compile-fail ../no_cxx11_hdr_array_fail.cpp ] ; +test-suite "BOOST_NO_CXX11_HDR_ATOMIC" : +[ run ../no_cxx11_hdr_atomic_pass.cpp ] +[ compile-fail ../no_cxx11_hdr_atomic_fail.cpp ] ; test-suite "BOOST_NO_CXX11_HDR_CHRONO" : [ run ../no_cxx11_hdr_chrono_pass.cpp ] [ compile-fail ../no_cxx11_hdr_chrono_fail.cpp ] ; @@ -292,7 +292,7 @@ test-suite "BOOST_NO_CXX11_HDR_UNORDERED_MAP" : test-suite "BOOST_NO_CXX11_HDR_UNORDERED_SET" : [ run ../no_cxx11_hdr_unordered_set_pass.cpp ] [ compile-fail ../no_cxx11_hdr_unordered_set_fail.cpp ] ; -test-suite "BOOST_NO_CXX11_INLINE_NAMESPACES" : +test-suite "BOOST_NO_CXX11_INLINE_NAMESPACES" : [ run ../no_cxx11_inline_namespaces_pass.cpp ] [ compile-fail ../no_cxx11_inline_namespaces_fail.cpp ] ; test-suite "BOOST_NO_CXX11_NUMERIC_LIMITS" : @@ -301,7 +301,7 @@ test-suite "BOOST_NO_CXX11_NUMERIC_LIMITS" : test-suite "BOOST_NO_CXX11_SMART_PTR" : [ run ../no_cxx11_smart_ptr_pass.cpp ] [ compile-fail ../no_cxx11_smart_ptr_fail.cpp ] ; -test-suite "BOOST_NO_CXX11_TRAILING_RESULT_TYPES" : +test-suite "BOOST_NO_CXX11_TRAILING_RESULT_TYPES" : [ run ../no_cxx11_trailing_result_types_pass.cpp ] [ compile-fail ../no_cxx11_trailing_result_types_fail.cpp ] ; test-suite "BOOST_NO_CXX11_USER_DEFINED_LITERALS" : @@ -436,6 +436,9 @@ test-suite "BOOST_NO_POINTER_TO_MEMBER_CONST" : test-suite "BOOST_NO_CXX11_RANGE_BASED_FOR" : [ run ../no_range_based_for_pass.cpp ] [ compile-fail ../no_range_based_for_fail.cpp ] ; +test-suite "BOOST_NO_CXX11_RAW_LITERALS" : +[ run ../no_raw_literals_pass.cpp ] +[ compile-fail ../no_raw_literals_fail.cpp ] ; test-suite "BOOST_NO_UNREACHABLE_RETURN_DETECTION" : [ run ../no_ret_det_pass.cpp ] [ compile-fail ../no_ret_det_fail.cpp ] ; diff --git a/test/boost_no_cxx11_hdr_atomic.ipp b/test/boost_no_cxx11_hdr_atomic.ipp new file mode 100644 index 00000000..7378e8cb --- /dev/null +++ b/test/boost_no_cxx11_hdr_atomic.ipp @@ -0,0 +1,89 @@ +// (C) Copyright John Maddock 2013 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_CXX11_HDR_ATOMIC +// TITLE: C++11 header is either not present or too broken to be used +// DESCRIPTION: The compiler does not support the C++11 header + +#include + +#if !defined(ATOMIC_BOOL_LOCK_FREE) || !defined(ATOMIC_CHAR_LOCK_FREE) || !defined(ATOMIC_CHAR16_T_LOCK_FREE) \ + || !defined(ATOMIC_CHAR32_T_LOCK_FREE) || !defined(ATOMIC_WCHAR_T_LOCK_FREE) || !defined(ATOMIC_SHORT_LOCK_FREE)\ + || !defined(ATOMIC_INT_LOCK_FREE) || !defined(ATOMIC_LONG_LOCK_FREE) || !defined(ATOMIC_LLONG_LOCK_FREE)\ + || !defined(ATOMIC_POINTER_LOCK_FREE) +# error "required macros not defined" +#endif + +namespace boost_no_cxx11_hdr_atomic { + +int test() +{ + std::memory_order m = static_cast(std::memory_order_relaxed | std::memory_order_consume | std::memory_order_acquire | std::memory_order_release + | std::memory_order_acq_rel | std::memory_order_seq_cst); + + std::atomic a1; + std::atomic a2; + std::atomic a3; + a1.is_lock_free(); + a1.store(1); + a1.load(); + a1.exchange(2); + int v; + a1.compare_exchange_weak(v, 2, std::memory_order_relaxed, std::memory_order_relaxed); + a1.compare_exchange_strong(v, 2, std::memory_order_relaxed, std::memory_order_relaxed); + a1.fetch_add(2); + a1.fetch_sub(3); + a1.fetch_and(3); + a1.fetch_or(1); + a1.fetch_xor(1); + a1++; + ++a1; + a1--; + --a1; + a1 += 2; + a1 -= 2; + a1 &= 1; + a1 |= 2; + a1 ^= 3; + + a3.store(&v); + a3.fetch_add(1); + a3.fetch_sub(1); + ++a3; + --a3; + a3++; + a3--; + a3 += 1; + a3 -= 1; + + std::atomic_is_lock_free(&a1); + // This produces linker errors on Mingw32 for some reason, probably not required anyway for most uses?? + //std::atomic_init(&a1, 2); + std::atomic_store(&a1, 3); + std::atomic_store_explicit(&a1, 3, std::memory_order_relaxed); + std::atomic_load(&a1); + std::atomic_load_explicit(&a1, std::memory_order_relaxed); + std::atomic_exchange(&a1, 3); + std::atomic_compare_exchange_weak(&a1, &v, 2); + std::atomic_compare_exchange_strong(&a1, &v, 2); + std::atomic_compare_exchange_weak_explicit(&a1, &v, 2, std::memory_order_relaxed, std::memory_order_relaxed); + std::atomic_compare_exchange_strong_explicit(&a1, &v, 2, std::memory_order_relaxed, std::memory_order_relaxed); + + std::atomic_flag f = ATOMIC_FLAG_INIT; + f.test_and_set(std::memory_order_relaxed); + f.test_and_set(); + f.clear(std::memory_order_relaxed); + f.clear(); + + std::atomic_thread_fence(std::memory_order_relaxed); + std::atomic_signal_fence(std::memory_order_relaxed); + + return 0; +} + +} diff --git a/test/config_info.cpp b/test/config_info.cpp index 8b82e81b..edef9653 100644 --- a/test/config_info.cpp +++ b/test/config_info.cpp @@ -1008,6 +1008,7 @@ void print_boost_macros() PRINT_MACRO(BOOST_NO_CXX11_EXTERN_TEMPLATE); PRINT_MACRO(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS); PRINT_MACRO(BOOST_NO_CXX11_HDR_ARRAY); + PRINT_MACRO(BOOST_NO_CXX11_HDR_ATOMIC); PRINT_MACRO(BOOST_NO_CXX11_HDR_CHRONO); PRINT_MACRO(BOOST_NO_CXX11_HDR_CODECVT); PRINT_MACRO(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE); @@ -1106,6 +1107,8 @@ void print_boost_macros() + + // END GENERATED BLOCK PRINT_MACRO(BOOST_INTEL); diff --git a/test/config_test.cpp b/test/config_test.cpp index bc19400a..b06114f4 100644 --- a/test/config_test.cpp +++ b/test/config_test.cpp @@ -1,4 +1,4 @@ -// This file was automatically generated on Sun Apr 28 18:36:49 2013 +// This file was automatically generated on Thu Dec 12 19:09:40 2013 // by libs/config/tools/generate.cpp // Copyright John Maddock 2002-4. // Use, modification and distribution are subject to the @@ -122,6 +122,11 @@ namespace boost_no_cxx11_atomic_smart_ptr = empty_boost; #else namespace boost_no_cxx11_hdr_array = empty_boost; #endif +#ifndef BOOST_NO_CXX11_HDR_ATOMIC +#include "boost_no_cxx11_hdr_atomic.ipp" +#else +namespace boost_no_cxx11_hdr_atomic = empty_boost; +#endif #ifndef BOOST_NO_CXX11_HDR_CHRONO #include "boost_no_cxx11_hdr_chrono.ipp" #else @@ -212,11 +217,6 @@ namespace boost_no_cxx11_hdr_unordered_set = empty_boost; #else namespace boost_no_cxx11_inline_namespaces = empty_boost; #endif -#ifndef BOOST_NO_CXX11_TRAILING_RESULT_TYPES -#include "boost_no_cxx11_trailing_result_types.ipp" -#else -namespace boost_no_cxx11_trailing_result_types = empty_boost; -#endif #ifndef BOOST_NO_CXX11_NUMERIC_LIMITS #include "boost_no_cxx11_numeric_limits.ipp" #else @@ -227,6 +227,11 @@ namespace boost_no_cxx11_numeric_limits = empty_boost; #else namespace boost_no_cxx11_smart_ptr = empty_boost; #endif +#ifndef BOOST_NO_CXX11_TRAILING_RESULT_TYPES +#include "boost_no_cxx11_trailing_result_types.ipp" +#else +namespace boost_no_cxx11_trailing_result_types = empty_boost; +#endif #ifndef BOOST_NO_CXX11_USER_DEFINED_LITERALS #include "boost_no_cxx11_user_lit.ipp" #else @@ -1266,6 +1271,11 @@ int main( int, char *[] ) std::cerr << "Failed test for BOOST_NO_CXX11_HDR_ARRAY at: " << __FILE__ << ":" << __LINE__ << std::endl; ++error_count; } + if(0 != boost_no_cxx11_hdr_atomic::test()) + { + std::cerr << "Failed test for BOOST_NO_CXX11_HDR_ATOMIC at: " << __FILE__ << ":" << __LINE__ << std::endl; + ++error_count; + } if(0 != boost_no_cxx11_hdr_chrono::test()) { std::cerr << "Failed test for BOOST_NO_CXX11_HDR_CHRONO at: " << __FILE__ << ":" << __LINE__ << std::endl; diff --git a/test/no_cxx11_hdr_atomic_fail.cpp b/test/no_cxx11_hdr_atomic_fail.cpp new file mode 100644 index 00000000..9aa880f9 --- /dev/null +++ b/test/no_cxx11_hdr_atomic_fail.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Thu Dec 12 19:07:12 2013 +// by libs/config/tools/generate.cpp +// Copyright John Maddock 2002-4. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for the most recent version.// +// Revision $Id$ +// + + +// Test file for macro BOOST_NO_CXX11_ATOMIC_SMART_PTR +// This file should not compile, if it does then +// BOOST_NO_CXX11_ATOMIC_SMART_PTR should not be defined. +// See file boost_no_cxx11_hdr_atomic.ipp for details + +// Must not have BOOST_ASSERT_CONFIG set; it defeats +// the objective of this file: +#ifdef BOOST_ASSERT_CONFIG +# undef BOOST_ASSERT_CONFIG +#endif + +#include +#include "test.hpp" + +#ifdef BOOST_NO_CXX11_ATOMIC_SMART_PTR +#include "boost_no_cxx11_hdr_atomic.ipp" +#else +#error "this file should not compile" +#endif + +int main( int, char *[] ) +{ + return boost_no_cxx11_atomic_smart_ptr::test(); +} + diff --git a/test/no_cxx11_hdr_atomic_pass.cpp b/test/no_cxx11_hdr_atomic_pass.cpp new file mode 100644 index 00000000..f82eddef --- /dev/null +++ b/test/no_cxx11_hdr_atomic_pass.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Thu Dec 12 19:07:12 2013 +// by libs/config/tools/generate.cpp +// Copyright John Maddock 2002-4. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for the most recent version.// +// Revision $Id$ +// + + +// Test file for macro BOOST_NO_CXX11_ATOMIC_SMART_PTR +// This file should compile, if it does not then +// BOOST_NO_CXX11_ATOMIC_SMART_PTR should be defined. +// See file boost_no_cxx11_hdr_atomic.ipp for details + +// Must not have BOOST_ASSERT_CONFIG set; it defeats +// the objective of this file: +#ifdef BOOST_ASSERT_CONFIG +# undef BOOST_ASSERT_CONFIG +#endif + +#include +#include "test.hpp" + +#ifndef BOOST_NO_CXX11_ATOMIC_SMART_PTR +#include "boost_no_cxx11_hdr_atomic.ipp" +#else +namespace boost_no_cxx11_atomic_smart_ptr = empty_boost; +#endif + +int main( int, char *[] ) +{ + return boost_no_cxx11_atomic_smart_ptr::test(); +} + From 50c736c9ab7c38378aa61c830c6242d9b32fb736 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Fri, 13 Dec 2013 09:53:06 +0000 Subject: [PATCH 2/8] GCC-4.7x at least on Mingw does not have a conforming header - at least not that you can link to. --- include/boost/config/stdlib/libstdcpp3.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/boost/config/stdlib/libstdcpp3.hpp b/include/boost/config/stdlib/libstdcpp3.hpp index 496e8d1b..d1322027 100644 --- a/include/boost/config/stdlib/libstdcpp3.hpp +++ b/include/boost/config/stdlib/libstdcpp3.hpp @@ -155,6 +155,11 @@ // so 4.7.0 is the first truely conforming one. # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_ALLOCATOR +#endif +// C++0x features in GCC 4.7.0 and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +// Note that although existed prior to gcc 4.8 it was largely unimplemented for many types: # define BOOST_NO_CXX11_HDR_ATOMIC #endif // C++0x headers not yet (fully!) implemented From 650c926c48b4fb25715f4474c9ad3fc4878f0ad8 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Fri, 13 Dec 2013 09:54:35 +0000 Subject: [PATCH 3/8] Reorganize WinCE config based on https://svn.boost.org/trac/boost/ticket/9095. --- include/boost/config/compiler/visualc.hpp | 11 ----------- include/boost/config/platform/win32.hpp | 19 +++++++++++++------ 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/include/boost/config/compiler/visualc.hpp b/include/boost/config/compiler/visualc.hpp index 1fc41d1c..9249e8a6 100644 --- a/include/boost/config/compiler/visualc.hpp +++ b/include/boost/config/compiler/visualc.hpp @@ -86,17 +86,6 @@ # define BOOST_NO_INTRINSIC_WCHAR_T #endif -#if defined(_WIN32_WCE) || defined(UNDER_CE) -// Windows CE does not have a conforming signature for swprintf -# define BOOST_NO_SWPRINTF -#endif - -// we have ThreadEx or GetSystemTimeAsFileTime unless we're running WindowsCE -#if !defined(_WIN32_WCE) && !defined(UNDER_CE) -# define BOOST_HAS_THREADEX -# define BOOST_HAS_GETSYSTEMTIMEASFILETIME -#endif - // // check for exception handling support: #if !defined(_CPPUNWIND) && !defined(BOOST_NO_EXCEPTIONS) diff --git a/include/boost/config/platform/win32.hpp b/include/boost/config/platform/win32.hpp index 6ab59f4e..2a91519e 100644 --- a/include/boost/config/platform/win32.hpp +++ b/include/boost/config/platform/win32.hpp @@ -55,16 +55,23 @@ // all translation units (needed for shared_ptr etc). // -#ifdef _WIN32_WCE -# define BOOST_NO_ANSI_APIS -#else -# define BOOST_HAS_GETSYSTEMTIMEASFILETIME -#endif - #ifndef BOOST_HAS_PTHREADS # define BOOST_HAS_WINTHREADS #endif +// +// WinCE configuration: +// +#if defined(_WIN32_WCE) || defined(UNDER_CE) +# define BOOST_NO_ANSI_APIS +// Windows CE does not have a conforming signature for swprintf +# define BOOST_NO_SWPRINTF +#else +# define BOOST_HAS_GETSYSTEMTIMEASFILETIME +# define BOOST_HAS_THREADEX +# define BOOST_HAS_GETSYSTEMTIMEASFILETIME +#endif + #ifndef BOOST_DISABLE_WIN32 // WEK: Added #define BOOST_HAS_FTIME From b0ed886eaaf62a1668c374d8362f9979184f66b6 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Fri, 13 Dec 2013 13:27:51 +0000 Subject: [PATCH 4/8] Fix for nvcc, see https://svn.boost.org/trac/boost/ticket/9392 --- include/boost/config/suffix.hpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/include/boost/config/suffix.hpp b/include/boost/config/suffix.hpp index 485a5bc5..25b0508f 100644 --- a/include/boost/config/suffix.hpp +++ b/include/boost/config/suffix.hpp @@ -558,7 +558,13 @@ namespace std{ using ::type_info; } # define BOOST_NOINLINE __declspec(noinline) # elif defined(__GNUC__) && __GNUC__ > 3 // Clang also defines __GNUC__ (as 4) -# define BOOST_NOINLINE __attribute__ ((__noinline__)) +# if defined(__CUDACC__) + // nvcc doesn't always parse __noinline__, + // see: https://svn.boost.org/trac/boost/ticket/9392 +# define BOOST_NOINLINE __attribute__ ((noinline)) +# else +# define BOOST_NOINLINE __attribute__ ((__noinline__)) +# endif # else # define BOOST_NOINLINE # endif From 62b1bb07d26e6fa4e3bf512280726bcd638b00eb Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Fri, 13 Dec 2013 13:47:50 +0000 Subject: [PATCH 5/8] Apply patch from https://svn.boost.org/trac/boost/ticket/9410 --- include/boost/config/compiler/visualc.hpp | 2 +- test/no_decltype_n3276_fail.cpp | 2 +- test/no_decltype_n3276_pass.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/boost/config/compiler/visualc.hpp b/include/boost/config/compiler/visualc.hpp index 9249e8a6..fb30fc12 100644 --- a/include/boost/config/compiler/visualc.hpp +++ b/include/boost/config/compiler/visualc.hpp @@ -165,13 +165,13 @@ # define BOOST_NO_CXX11_TRAILING_RESULT_TYPES # define BOOST_NO_CXX11_VARIADIC_TEMPLATES # define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX +# define BOOST_NO_CXX11_DECLTYPE_N3276 #endif // C++11 features not supported by any versions #define BOOST_NO_CXX11_CHAR16_T #define BOOST_NO_CXX11_CHAR32_T #define BOOST_NO_CXX11_CONSTEXPR -#define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_SFINAE_EXPR diff --git a/test/no_decltype_n3276_fail.cpp b/test/no_decltype_n3276_fail.cpp index 35a6d123..1e86fb6f 100644 --- a/test/no_decltype_n3276_fail.cpp +++ b/test/no_decltype_n3276_fail.cpp @@ -32,6 +32,6 @@ int main( int, char *[] ) { - return boost_no_decltype_n3276::test(); + return boost_no_cxx11_decltype_n3276::test(); } diff --git a/test/no_decltype_n3276_pass.cpp b/test/no_decltype_n3276_pass.cpp index b1b8c0a6..0eb3a21f 100644 --- a/test/no_decltype_n3276_pass.cpp +++ b/test/no_decltype_n3276_pass.cpp @@ -27,11 +27,11 @@ #ifndef BOOST_NO_CXX11_DECLTYPE_N3276 #include "boost_no_decltype_n3276.ipp" #else -namespace boost_no_decltype_n3276 = empty_boost; +namespace boost_no_cxx11_decltype_n3276 = empty_boost; #endif int main( int, char *[] ) { - return boost_no_decltype_n3276::test(); + return boost_no_cxx11_decltype_n3276::test(); } From 1c3cec7a158324cd27c41e8cef568c2e60a56b00 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Fri, 13 Dec 2013 18:51:32 +0000 Subject: [PATCH 6/8] Fix buggy test cases. VC++ has in recent versions. --- include/boost/config/stdlib/dinkumware.hpp | 5 +---- test/no_cxx11_hdr_atomic_fail.cpp | 4 ++-- test/no_cxx11_hdr_atomic_pass.cpp | 6 +++--- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/include/boost/config/stdlib/dinkumware.hpp b/include/boost/config/stdlib/dinkumware.hpp index b3a92a37..a0ed8702 100644 --- a/include/boost/config/stdlib/dinkumware.hpp +++ b/include/boost/config/stdlib/dinkumware.hpp @@ -142,12 +142,9 @@ // #if !defined(_CPPLIB_VER) || _CPPLIB_VER < 610 # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_HDR_ATOMIC #endif -// Not present in any version: -// -#define BOOST_NO_CXX11_HDR_ATOMIC - #ifdef _CPPLIB_VER # define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER #else diff --git a/test/no_cxx11_hdr_atomic_fail.cpp b/test/no_cxx11_hdr_atomic_fail.cpp index 9aa880f9..196f47cf 100644 --- a/test/no_cxx11_hdr_atomic_fail.cpp +++ b/test/no_cxx11_hdr_atomic_fail.cpp @@ -24,7 +24,7 @@ #include #include "test.hpp" -#ifdef BOOST_NO_CXX11_ATOMIC_SMART_PTR +#ifdef BOOST_NO_CXX11_HDR_ATOMIC #include "boost_no_cxx11_hdr_atomic.ipp" #else #error "this file should not compile" @@ -32,6 +32,6 @@ int main( int, char *[] ) { - return boost_no_cxx11_atomic_smart_ptr::test(); + return boost_no_cxx11_hdr_atomic::test(); } diff --git a/test/no_cxx11_hdr_atomic_pass.cpp b/test/no_cxx11_hdr_atomic_pass.cpp index f82eddef..31f7ed96 100644 --- a/test/no_cxx11_hdr_atomic_pass.cpp +++ b/test/no_cxx11_hdr_atomic_pass.cpp @@ -24,14 +24,14 @@ #include #include "test.hpp" -#ifndef BOOST_NO_CXX11_ATOMIC_SMART_PTR +#ifndef BOOST_NO_CXX11_HDR_ATOMIC #include "boost_no_cxx11_hdr_atomic.ipp" #else -namespace boost_no_cxx11_atomic_smart_ptr = empty_boost; +namespace boost_no_cxx11_hdr_atomic = empty_boost; #endif int main( int, char *[] ) { - return boost_no_cxx11_atomic_smart_ptr::test(); + return boost_no_cxx11_hdr_atomic::test(); } From 958c9f8a5154f7236f5d1549ab9326cb6a174922 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Fri, 13 Dec 2013 19:13:48 +0000 Subject: [PATCH 7/8] Add some const qualifiers in the hopes it will fix clang C++14 mode failures. --- test/boost_no_constexpr.ipp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/boost_no_constexpr.ipp b/test/boost_no_constexpr.ipp index 82de2e2d..563bdb20 100644 --- a/test/boost_no_constexpr.ipp +++ b/test/boost_no_constexpr.ipp @@ -24,15 +24,15 @@ constexpr const int* xp = addr(x); struct A { constexpr A(int i) : val(i) { } - constexpr operator int() { return val; } - constexpr operator long() { return 43; } + constexpr operator int()const { return val; } + constexpr operator long()const { return 43; } private: int val; }; template struct X { }; -constexpr A a = 42; +constexpr const A a = 42; X xx; // OK: unique conversion to int From 743fa7e1293f9131c5545bf078642a9dccdd8a69 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Fri, 13 Dec 2013 19:39:42 +0000 Subject: [PATCH 8/8] Fix two more typos. --- test/no_cxx11_hdr_atomic_fail.cpp | 4 ++-- test/no_cxx11_hdr_atomic_pass.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/no_cxx11_hdr_atomic_fail.cpp b/test/no_cxx11_hdr_atomic_fail.cpp index 196f47cf..cb6bd124 100644 --- a/test/no_cxx11_hdr_atomic_fail.cpp +++ b/test/no_cxx11_hdr_atomic_fail.cpp @@ -10,9 +10,9 @@ // -// Test file for macro BOOST_NO_CXX11_ATOMIC_SMART_PTR +// Test file for macro BOOST_NO_CXX11_HDR_ATOMIC // This file should not compile, if it does then -// BOOST_NO_CXX11_ATOMIC_SMART_PTR should not be defined. +// BOOST_NO_CXX11_HDR_ATOMIC should not be defined. // See file boost_no_cxx11_hdr_atomic.ipp for details // Must not have BOOST_ASSERT_CONFIG set; it defeats diff --git a/test/no_cxx11_hdr_atomic_pass.cpp b/test/no_cxx11_hdr_atomic_pass.cpp index 31f7ed96..7258f646 100644 --- a/test/no_cxx11_hdr_atomic_pass.cpp +++ b/test/no_cxx11_hdr_atomic_pass.cpp @@ -10,9 +10,9 @@ // -// Test file for macro BOOST_NO_CXX11_ATOMIC_SMART_PTR +// Test file for macro BOOST_NO_CXX11_HDR_ATOMIC // This file should compile, if it does not then -// BOOST_NO_CXX11_ATOMIC_SMART_PTR should be defined. +// BOOST_NO_CXX11_HDR_ATOMIC should be defined. // See file boost_no_cxx11_hdr_atomic.ipp for details // Must not have BOOST_ASSERT_CONFIG set; it defeats