diff --git a/checks/Jamfile.v2 b/checks/Jamfile.v2 index fc74ed39..dcdcd7eb 100644 --- a/checks/Jamfile.v2 +++ b/checks/Jamfile.v2 @@ -1,6 +1,6 @@ # # *** DO NOT EDIT THIS FILE BY HAND *** -# This file was automatically generated on Fri Oct 14 20:08:50 2016 +# This file was automatically generated on Mon Dec 12 19:37:08 2016 # by libs/config/tools/generate.cpp # Copyright John Maddock. # Use, modification and distribution are subject to the @@ -9,7 +9,7 @@ import modules ; import path ; -import testing ; + rule run-simple ( requirements * : target-name ) { @@ -130,7 +130,9 @@ run-simple TEST_BOOST_NO_CXX14_HDR_SHARED_MUTEX : cxx14_hdr_shared_mutex run-simple TEST_BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES : cxx14_initialized_lambda_captures ; run-simple TEST_BOOST_NO_CXX14_AGGREGATE_NSDMI : cxx14_aggregate_nsdmi ; run-simple TEST_BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION : cxx14_return_type_deduction ; +run-simple TEST_BOOST_NO_CXX14_STD_EXCHANGE : cxx14_std_exchange ; run-simple TEST_BOOST_NO_CXX14_VARIABLE_TEMPLATES : cxx14_variable_templates ; +run-simple TEST_BOOST_NO_CXX17_STD_APPLY : cxx17_std_apply ; run-simple TEST_BOOST_NO_CXX17_STD_INVOKE : cxx17_std_invoke ; run-simple TEST_BOOST_NO_CXX11_HDR_FUNCTIONAL : cxx11_hdr_functional ; run-simple TEST_BOOST_NO_CXX11_DECLTYPE : cxx11_decltype ; diff --git a/checks/test_case.cpp b/checks/test_case.cpp index d3ad56ca..dbfaa653 100644 --- a/checks/test_case.cpp +++ b/checks/test_case.cpp @@ -1,4 +1,4 @@ -// This file was automatically generated on Fri Oct 14 20:08:50 2016 +// This file was automatically generated on Mon Dec 12 19:37:08 2016 // by libs/config/tools/generate.cpp // Copyright John Maddock 2002-4. // Use, modification and distribution are subject to the @@ -453,10 +453,18 @@ namespace test = boost_no_cxx14_aggregate_nsdmi; # include "../test/boost_no_cxx14_return_type_ded.ipp" namespace test = boost_no_cxx14_return_type_deduction; #endif +#ifdef TEST_BOOST_NO_CXX14_STD_EXCHANGE +# include "../test/boost_no_cxx14_std_exchange.ipp" +namespace test = boost_no_cxx14_std_exchange; +#endif #ifdef TEST_BOOST_NO_CXX14_VARIABLE_TEMPLATES # include "../test/boost_no_cxx14_var_templ.ipp" namespace test = boost_no_cxx14_variable_templates; #endif +#ifdef TEST_BOOST_NO_CXX17_STD_APPLY +# include "../test/boost_no_cxx17_std_apply.ipp" +namespace test = boost_no_cxx17_std_apply; +#endif #ifdef TEST_BOOST_NO_CXX17_STD_INVOKE # include "../test/boost_no_cxx17_std_invoke.ipp" namespace test = boost_no_cxx17_std_invoke; diff --git a/include/boost/config/stdlib/dinkumware.hpp b/include/boost/config/stdlib/dinkumware.hpp index 5f7a0321..ad9e4f5d 100644 --- a/include/boost/config/stdlib/dinkumware.hpp +++ b/include/boost/config/stdlib/dinkumware.hpp @@ -157,8 +157,14 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +#if !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650) +# define BOOST_NO_CXX14_STD_EXCHANGE +#endif + // C++17 features #if !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650) +# define BOOST_NO_CXX17_STD_APPLY # define BOOST_NO_CXX17_STD_INVOKE #endif diff --git a/include/boost/config/stdlib/libcomo.hpp b/include/boost/config/stdlib/libcomo.hpp index 07c48965..e3fc627f 100644 --- a/include/boost/config/stdlib/libcomo.hpp +++ b/include/boost/config/stdlib/libcomo.hpp @@ -72,7 +72,11 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + // C++17 features +# define BOOST_NO_CXX17_STD_APPLY # define BOOST_NO_CXX17_STD_INVOKE // diff --git a/include/boost/config/stdlib/libcpp.hpp b/include/boost/config/stdlib/libcpp.hpp index dca0ea7b..2eea9997 100644 --- a/include/boost/config/stdlib/libcpp.hpp +++ b/include/boost/config/stdlib/libcpp.hpp @@ -79,10 +79,18 @@ #define BOOST_NO_STD_MESSAGES #endif +// C++14 features +#if (_LIBCPP_VERSION < 3700) || (__cplusplus <= 201402L) +# define BOOST_NO_CXX14_STD_EXCHANGE +#endif + // C++17 features #if (_LIBCPP_VERSION < 3700) || (__cplusplus <= 201402L) # define BOOST_NO_CXX17_STD_INVOKE #endif +#if (_LIBCPP_VERSION < 4000) || (__cplusplus <= 201402L) +# define BOOST_NO_CXX17_STD_APPLY +#endif #if (_LIBCPP_VERSION <= 1101) && !defined(BOOST_NO_CXX11_THREAD_LOCAL) // This is a bit of a sledgehammer, because really it's just libc++abi that has no diff --git a/include/boost/config/stdlib/libstdcpp3.hpp b/include/boost/config/stdlib/libstdcpp3.hpp index d4596498..6e40bad4 100644 --- a/include/boost/config/stdlib/libstdcpp3.hpp +++ b/include/boost/config/stdlib/libstdcpp3.hpp @@ -239,6 +239,7 @@ // Although is present and compilable against, the actual implementation is not functional // even for the simplest patterns such as "\d" or "[0-9]". This is the case at least in gcc up to 4.8, inclusively. # define BOOST_NO_CXX11_HDR_REGEX +# define BOOST_NO_CXX14_STD_EXCHANGE #endif #if defined(__clang_major__) && ((__clang_major__ < 3) || ((__clang_major__ == 3) && (__clang_minor__ < 7))) @@ -261,6 +262,9 @@ #if (BOOST_LIBSTDCXX_VERSION < 60100) || (__cplusplus <= 201402L) # define BOOST_NO_CXX17_STD_INVOKE #endif +#if (BOOST_LIBSTDCXX_VERSION < 70100) || (__cplusplus <= 201402L) +# define BOOST_NO_CXX17_STD_APPLY +#endif #if defined(__has_include) #if !__has_include() diff --git a/include/boost/config/stdlib/modena.hpp b/include/boost/config/stdlib/modena.hpp index 7092e9ba..fa4a8187 100644 --- a/include/boost/config/stdlib/modena.hpp +++ b/include/boost/config/stdlib/modena.hpp @@ -61,7 +61,11 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + // C++17 features +# define BOOST_NO_CXX17_STD_APPLY # define BOOST_NO_CXX17_STD_INVOKE #define BOOST_STDLIB "Modena C++ standard library" diff --git a/include/boost/config/stdlib/msl.hpp b/include/boost/config/stdlib/msl.hpp index ce60b7ee..8f21a138 100644 --- a/include/boost/config/stdlib/msl.hpp +++ b/include/boost/config/stdlib/msl.hpp @@ -85,7 +85,11 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + // C++17 features +# define BOOST_NO_CXX17_STD_APPLY # define BOOST_NO_CXX17_STD_INVOKE #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 e87ec78d..437d38d9 100644 --- a/include/boost/config/stdlib/roguewave.hpp +++ b/include/boost/config/stdlib/roguewave.hpp @@ -197,5 +197,9 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + // C++17 features +# define BOOST_NO_CXX17_STD_APPLY # define BOOST_NO_CXX17_STD_INVOKE diff --git a/include/boost/config/stdlib/sgi.hpp b/include/boost/config/stdlib/sgi.hpp index 1623de38..8d2f849f 100644 --- a/include/boost/config/stdlib/sgi.hpp +++ b/include/boost/config/stdlib/sgi.hpp @@ -155,7 +155,11 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + // C++17 features +# define BOOST_NO_CXX17_STD_APPLY # define BOOST_NO_CXX17_STD_INVOKE #define BOOST_STDLIB "SGI standard library" diff --git a/include/boost/config/stdlib/stlport.hpp b/include/boost/config/stdlib/stlport.hpp index 6d796128..518f9efd 100644 --- a/include/boost/config/stdlib/stlport.hpp +++ b/include/boost/config/stdlib/stlport.hpp @@ -245,7 +245,11 @@ namespace boost { using std::min; using std::max; } # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + // C++17 features +# define BOOST_NO_CXX17_STD_APPLY # define BOOST_NO_CXX17_STD_INVOKE #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 0876cf8c..f9afef63 100644 --- a/include/boost/config/stdlib/vacpp.hpp +++ b/include/boost/config/stdlib/vacpp.hpp @@ -61,7 +61,11 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + // C++17 features +# define BOOST_NO_CXX17_STD_APPLY # define BOOST_NO_CXX17_STD_INVOKE #define BOOST_STDLIB "Visual Age default standard library" diff --git a/test/all/Jamfile.v2 b/test/all/Jamfile.v2 index d76b6cf3..57605714 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 Fri Oct 14 20:08:50 2016 +# This file was automatically generated on Mon Dec 12 19:37:08 2016 # by libs/config/tools/generate.cpp # Copyright John Maddock. # Use, modification and distribution are subject to the @@ -355,9 +355,15 @@ test-suite "BOOST_NO_CXX14_AGGREGATE_NSDMI" : test-suite "BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION" : [ run ../no_cxx14_return_type_ded_pass.cpp ] [ compile-fail ../no_cxx14_return_type_ded_fail.cpp ] ; +test-suite "BOOST_NO_CXX14_STD_EXCHANGE" : +[ run ../no_cxx14_std_exchange_pass.cpp ] +[ compile-fail ../no_cxx14_std_exchange_fail.cpp ] ; test-suite "BOOST_NO_CXX14_VARIABLE_TEMPLATES" : [ run ../no_cxx14_var_templ_pass.cpp ] [ compile-fail ../no_cxx14_var_templ_fail.cpp ] ; +test-suite "BOOST_NO_CXX17_STD_APPLY" : +[ run ../no_cxx17_std_apply_pass.cpp ] +[ compile-fail ../no_cxx17_std_apply_fail.cpp ] ; test-suite "BOOST_NO_CXX17_STD_INVOKE" : [ run ../no_cxx17_std_invoke_pass.cpp ] [ compile-fail ../no_cxx17_std_invoke_fail.cpp ] ; diff --git a/test/boost_no_cxx14_std_exchange.ipp b/test/boost_no_cxx14_std_exchange.ipp new file mode 100644 index 00000000..111abd9c --- /dev/null +++ b/test/boost_no_cxx14_std_exchange.ipp @@ -0,0 +1,23 @@ +// (C) Copyright Oliver Kowalke 2016. +// 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 most recent version. + +// MACRO: BOOST_NO_CXX14_STD_EXCHANGE +// TITLE: apply +// DESCRIPTION: The compiler supports the std::exchange() function. + +#include + +namespace boost_no_cxx14_std_exchange { + +int test() { + int * i = new int( 1); + int * j = std::exchange( i, nullptr); + delete j; + return 0; +} + +} diff --git a/test/boost_no_cxx17_std_apply.ipp b/test/boost_no_cxx17_std_apply.ipp new file mode 100644 index 00000000..c657c039 --- /dev/null +++ b/test/boost_no_cxx17_std_apply.ipp @@ -0,0 +1,28 @@ +// (C) Copyright Oliver Kowalke 2016. +// 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 most recent version. + +// MACRO: BOOST_NO_CXX17_STD_APPLY +// TITLE: apply +// DESCRIPTION: The compiler supports the std::apply() function. + +#include +#include + +namespace boost_no_cxx17_std_apply { + +int foo( int i, int j) { + return i + j; +} + +int test() { + int i = 1, j = 2; + std::apply( foo, std::make_tuple( i, j) ); + return 0; +} + +} + diff --git a/test/config_info.cpp b/test/config_info.cpp index 8bb1e441..53251d28 100644 --- a/test/config_info.cpp +++ b/test/config_info.cpp @@ -1073,7 +1073,9 @@ void print_boost_macros() PRINT_MACRO(BOOST_NO_CXX14_HDR_SHARED_MUTEX); PRINT_MACRO(BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES); PRINT_MACRO(BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION); + PRINT_MACRO(BOOST_NO_CXX14_STD_EXCHANGE); PRINT_MACRO(BOOST_NO_CXX14_VARIABLE_TEMPLATES); + PRINT_MACRO(BOOST_NO_CXX17_STD_APPLY); PRINT_MACRO(BOOST_NO_CXX17_STD_INVOKE); PRINT_MACRO(BOOST_NO_DEPENDENT_NESTED_DERIVATIONS); PRINT_MACRO(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS); @@ -1145,6 +1147,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 a887972d..77f4511c 100644 --- a/test/config_test.cpp +++ b/test/config_test.cpp @@ -1,4 +1,4 @@ -// This file was automatically generated on Fri Oct 14 20:08:50 2016 +// This file was automatically generated on Mon Dec 12 19:37:08 2016 // by libs/config/tools/generate.cpp // Copyright John Maddock 2002-4. // Use, modification and distribution are subject to the @@ -312,11 +312,21 @@ namespace boost_no_cxx14_aggregate_nsdmi = empty_boost; #else namespace boost_no_cxx14_return_type_deduction = empty_boost; #endif +#ifndef BOOST_NO_CXX14_STD_EXCHANGE +#include "boost_no_cxx14_std_exchange.ipp" +#else +namespace boost_no_cxx14_std_exchange = empty_boost; +#endif #ifndef BOOST_NO_CXX14_VARIABLE_TEMPLATES #include "boost_no_cxx14_var_templ.ipp" #else namespace boost_no_cxx14_variable_templates = empty_boost; #endif +#ifndef BOOST_NO_CXX17_STD_APPLY +#include "boost_no_cxx17_std_apply.ipp" +#else +namespace boost_no_cxx17_std_apply = empty_boost; +#endif #ifndef BOOST_NO_CXX17_STD_INVOKE #include "boost_no_cxx17_std_invoke.ipp" #else @@ -1561,11 +1571,21 @@ int main( int, char *[] ) std::cerr << "Failed test for BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION at: " << __FILE__ << ":" << __LINE__ << std::endl; ++error_count; } + if(0 != boost_no_cxx14_std_exchange::test()) + { + std::cerr << "Failed test for BOOST_NO_CXX14_STD_EXCHANGE at: " << __FILE__ << ":" << __LINE__ << std::endl; + ++error_count; + } if(0 != boost_no_cxx14_variable_templates::test()) { std::cerr << "Failed test for BOOST_NO_CXX14_VARIABLE_TEMPLATES at: " << __FILE__ << ":" << __LINE__ << std::endl; ++error_count; } + if(0 != boost_no_cxx17_std_apply::test()) + { + std::cerr << "Failed test for BOOST_NO_CXX17_STD_APPLY at: " << __FILE__ << ":" << __LINE__ << std::endl; + ++error_count; + } if(0 != boost_no_cxx17_std_invoke::test()) { std::cerr << "Failed test for BOOST_NO_CXX17_STD_INVOKE at: " << __FILE__ << ":" << __LINE__ << std::endl; diff --git a/test/no_cxx14_std_exchange_fail.cpp b/test/no_cxx14_std_exchange_fail.cpp new file mode 100644 index 00000000..c7100377 --- /dev/null +++ b/test/no_cxx14_std_exchange_fail.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Fri Oct 14 12:13:46 2016 +// 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_CXX17_STD_APPLY +// This file should not compile, if it does then +// BOOST_NO_CXX17_STD_APPLY should not be defined. +// See file boost_no_cxx17_std_apply.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_CXX14_STD_EXCHANGE +#include "boost_no_cxx14_std_exchange.ipp" +#else +#error "this file should not compile" +#endif + +int main( int, char *[] ) +{ + return boost_no_cxx14_std_exchange::test(); +} + diff --git a/test/no_cxx14_std_exchange_pass.cpp b/test/no_cxx14_std_exchange_pass.cpp new file mode 100644 index 00000000..edac2fbf --- /dev/null +++ b/test/no_cxx14_std_exchange_pass.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Fri Oct 14 12:13:46 2016 +// 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_CXX17_STD_APPLY +// This file should compile, if it does not then +// BOOST_NO_CXX!/_STD_APPLY should be defined. +// See file boost_no_cxx17_std_apply.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_CXX14_STD_EXCHANGE +#include "boost_no_cxx14_std_exchange.ipp" +#else +namespace boost_no_cxx14_std_exchange = empty_boost; +#endif + +int main( int, char *[] ) +{ + return boost_no_cxx14_std_exchange::test(); +} + diff --git a/test/no_cxx17_std_apply_fail.cpp b/test/no_cxx17_std_apply_fail.cpp new file mode 100644 index 00000000..e1c3d367 --- /dev/null +++ b/test/no_cxx17_std_apply_fail.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Fri Oct 14 12:13:46 2016 +// 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_CXX17_STD_APPLY +// This file should not compile, if it does then +// BOOST_NO_CXX17_STD_APPLY should not be defined. +// See file boost_no_cxx17_std_apply.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_CXX17_STD_APPLY +#include "boost_no_cxx17_std_apply.ipp" +#else +#error "this file should not compile" +#endif + +int main( int, char *[] ) +{ + return boost_no_cxx17_std_apply::test(); +} + diff --git a/test/no_cxx17_std_apply_pass.cpp b/test/no_cxx17_std_apply_pass.cpp new file mode 100644 index 00000000..b3aa8744 --- /dev/null +++ b/test/no_cxx17_std_apply_pass.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Fri Oct 14 12:13:46 2016 +// 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_CXX17_STD_APPLY +// This file should compile, if it does not then +// BOOST_NO_CXX!/_STD_APPLY should be defined. +// See file boost_no_cxx17_std_apply.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_CXX17_STD_APPLY +#include "boost_no_cxx17_std_apply.ipp" +#else +namespace boost_no_cxx17_std_apply = empty_boost; +#endif + +int main( int, char *[] ) +{ + return boost_no_cxx17_std_apply::test(); +} +