From 5364a2e8a75a8f2f48b2aa790b9e85aa42e4f9c7 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Sat, 4 Aug 2018 19:21:21 +0100 Subject: [PATCH] Add new macro BOOST_NO_CXX17_HDR_OPTIONAL. Fixes: https://github.com/boostorg/config/issues/236. --- checks/Jamfile.v2 | 3 +- checks/test_case.cpp | 7 +++- .../boost_config/boost_macro_reference.html | 12 ++++++ doc/html/index.html | 2 +- doc/macro_reference.qbk | 1 + include/boost/config/compiler/visualc.hpp | 1 + include/boost/config/detail/suffix.hpp | 5 +++ include/boost/config/stdlib/libcpp.hpp | 1 + include/boost/config/stdlib/libstdcpp3.hpp | 1 + test/all/Jamfile.v2 | 5 ++- test/boost_no_cxx17_hdr_optional.ipp | 23 ++++++++++++ test/config_info.cpp | 2 + test/config_test.cpp | 12 +++++- test/no_cxx17_hdr_optional_fail.cpp | 37 +++++++++++++++++++ test/no_cxx17_hdr_optional_pass.cpp | 37 +++++++++++++++++++ 15 files changed, 144 insertions(+), 5 deletions(-) create mode 100644 test/boost_no_cxx17_hdr_optional.ipp create mode 100644 test/no_cxx17_hdr_optional_fail.cpp create mode 100644 test/no_cxx17_hdr_optional_pass.cpp diff --git a/checks/Jamfile.v2 b/checks/Jamfile.v2 index 0c26bce1..2fcbb854 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 Wed Apr 18 20:03:40 2018 +# This file was automatically generated on Sat Aug 4 19:11:09 2018 # by libs/config/tools/generate.cpp # Copyright John Maddock. # Use, modification and distribution are subject to the @@ -112,6 +112,7 @@ obj cxx14_return_type_deduction : test_case.cpp : TEST_BOOST_NO_CXX14_RE obj cxx14_std_exchange : test_case.cpp : TEST_BOOST_NO_CXX14_STD_EXCHANGE ; obj cxx14_variable_templates : test_case.cpp : TEST_BOOST_NO_CXX14_VARIABLE_TEMPLATES ; obj cxx17_fold_expressions : test_case.cpp : TEST_BOOST_NO_CXX17_FOLD_EXPRESSIONS ; +obj cxx17_hdr_optional : test_case.cpp : TEST_BOOST_NO_CXX17_HDR_OPTIONAL ; obj cxx17_if_constexpr : test_case.cpp : TEST_BOOST_NO_CXX17_IF_CONSTEXPR ; obj cxx17_inline_variables : test_case.cpp : TEST_BOOST_NO_CXX17_INLINE_VARIABLES ; obj cxx17_iterator_traits : test_case.cpp : TEST_BOOST_NO_CXX17_ITERATOR_TRAITS ; diff --git a/checks/test_case.cpp b/checks/test_case.cpp index 7d9cb10c..b0a1f387 100644 --- a/checks/test_case.cpp +++ b/checks/test_case.cpp @@ -1,4 +1,4 @@ -// This file was automatically generated on Wed Apr 18 20:03:40 2018 +// This file was automatically generated on Sat Aug 4 19:11:09 2018 // by libs/config/tools/generate.cpp // Copyright John Maddock 2002-4. // Use, modification and distribution are subject to the @@ -516,6 +516,11 @@ # error "Defect macro BOOST_NO_CXX17_FOLD_EXPRESSIONS is defined." # endif #endif +#ifdef TEST_BOOST_NO_CXX17_HDR_OPTIONAL +# ifdef BOOST_NO_CXX17_HDR_OPTIONAL +# error "Defect macro BOOST_NO_CXX17_HDR_OPTIONAL is defined." +# endif +#endif #ifdef TEST_BOOST_NO_CXX17_IF_CONSTEXPR # ifdef BOOST_NO_CXX17_IF_CONSTEXPR # error "Defect macro BOOST_NO_CXX17_IF_CONSTEXPR is defined." diff --git a/doc/html/boost_config/boost_macro_reference.html b/doc/html/boost_config/boost_macro_reference.html index 118faccb..fd9fc6ba 100644 --- a/doc/html/boost_config/boost_macro_reference.html +++ b/doc/html/boost_config/boost_macro_reference.html @@ -3820,6 +3820,18 @@ + +

+ BOOST_NO_CXX17_HDR_OPTIONAL +

+ + +

+ The compiler does not support the header <optional>. +

+ + +

BOOST_NO_CXX17_STD_APPLY diff --git a/doc/html/index.html b/doc/html/index.html index 46c29361..8fba1b03 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -993,7 +993,7 @@ - +

Last revised: August 03, 2018 at 12:07:59 GMT

Last revised: August 04, 2018 at 18:19:41 GMT


diff --git a/doc/macro_reference.qbk b/doc/macro_reference.qbk index da21374c..4cad88fc 100644 --- a/doc/macro_reference.qbk +++ b/doc/macro_reference.qbk @@ -947,6 +947,7 @@ that are not yet supported by a particular compiler or library. [table [[Macro ][Description ]] +[[`BOOST_NO_CXX17_HDR_OPTIONAL`][The compiler does not support the header ``.]] [[`BOOST_NO_CXX17_STD_APPLY`][The compiler does not support `std::apply()`.]] [[`BOOST_NO_CXX17_STD_INVOKE`][The compiler does not support `std::invoke()`.]] [[`BOOST_NO_CXX17_ITERATOR_TRAITS`][The compiler does not support SFINAE-friendly `std::iterator_traits`.]] diff --git a/include/boost/config/compiler/visualc.hpp b/include/boost/config/compiler/visualc.hpp index 2110f851..3e7fce4a 100644 --- a/include/boost/config/compiler/visualc.hpp +++ b/include/boost/config/compiler/visualc.hpp @@ -202,6 +202,7 @@ #if (_MSC_VER < 1911) || (_MSVC_LANG < 201703) # define BOOST_NO_CXX17_STRUCTURED_BINDINGS # define BOOST_NO_CXX17_IF_CONSTEXPR +# define BOOST_NO_CXX17_HDR_OPTIONAL #endif // MSVC including version 14 has not yet completely diff --git a/include/boost/config/detail/suffix.hpp b/include/boost/config/detail/suffix.hpp index 22d31f68..d7c74aa4 100644 --- a/include/boost/config/detail/suffix.hpp +++ b/include/boost/config/detail/suffix.hpp @@ -1023,6 +1023,11 @@ namespace std{ using ::type_info; } # define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS #endif +// This is a catch all case for obsolete compilers / std libs: +#if !defined(__has_include) || !__has_include() +# define BOOST_NO_CXX17_HDR_OPTIONAL +#endif + // // Finish off with checks for macros that are depricated / no longer supported, // if any of these are set then it's very likely that much of Boost will no diff --git a/include/boost/config/stdlib/libcpp.hpp b/include/boost/config/stdlib/libcpp.hpp index 064b3edc..b6a5bcf8 100644 --- a/include/boost/config/stdlib/libcpp.hpp +++ b/include/boost/config/stdlib/libcpp.hpp @@ -89,6 +89,7 @@ // C++17 features #if (_LIBCPP_VERSION < 4000) || (__cplusplus <= 201402L) # define BOOST_NO_CXX17_STD_APPLY +# define BOOST_NO_CXX17_HDR_OPTIONAL #endif #if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR) # define BOOST_NO_AUTO_PTR diff --git a/include/boost/config/stdlib/libstdcpp3.hpp b/include/boost/config/stdlib/libstdcpp3.hpp index f6eab26c..d39c1f00 100644 --- a/include/boost/config/stdlib/libstdcpp3.hpp +++ b/include/boost/config/stdlib/libstdcpp3.hpp @@ -299,6 +299,7 @@ extern "C" char *gets (char *__s); #if (BOOST_LIBSTDCXX_VERSION < 70100) || (__cplusplus <= 201402L) # define BOOST_NO_CXX17_STD_INVOKE # define BOOST_NO_CXX17_STD_APPLY +# define BOOST_NO_CXX17_HDR_OPTIONAL #endif #if defined(__has_include) diff --git a/test/all/Jamfile.v2 b/test/all/Jamfile.v2 index ae3457c2..22682495 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 Wed Apr 18 20:03:40 2018 +# This file was automatically generated on Sat Aug 4 19:11:09 2018 # by libs/config/tools/generate.cpp # Copyright John Maddock. # Use, modification and distribution are subject to the @@ -325,6 +325,9 @@ test-suite "BOOST_NO_CXX14_VARIABLE_TEMPLATES" : test-suite "BOOST_NO_CXX17_FOLD_EXPRESSIONS" : [ run ../no_cxx17_fold_expressions_pass.cpp ] [ compile-fail ../no_cxx17_fold_expressions_fail.cpp ] ; +test-suite "BOOST_NO_CXX17_HDR_OPTIONAL" : +[ run ../no_cxx17_hdr_optional_pass.cpp ] +[ compile-fail ../no_cxx17_hdr_optional_fail.cpp ] ; test-suite "BOOST_NO_CXX17_IF_CONSTEXPR" : [ run ../no_cxx17_if_constexpr_pass.cpp ] [ compile-fail ../no_cxx17_if_constexpr_fail.cpp ] ; diff --git a/test/boost_no_cxx17_hdr_optional.ipp b/test/boost_no_cxx17_hdr_optional.ipp new file mode 100644 index 00000000..86d799ef --- /dev/null +++ b/test/boost_no_cxx17_hdr_optional.ipp @@ -0,0 +1,23 @@ +// (C) Copyright John Maddock 2018 + +// 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_CXX17_HDR_OPTIONAL +// TITLE: C++17 header unavailable +// DESCRIPTION: The standard library does not supply C++17 header + +#include + +namespace boost_no_cxx17_hdr_optional { + +int test() +{ + using std::optional; + return 0; +} + +} diff --git a/test/config_info.cpp b/test/config_info.cpp index b5629772..ab4bfd46 100644 --- a/test/config_info.cpp +++ b/test/config_info.cpp @@ -1159,6 +1159,7 @@ void print_boost_macros() PRINT_MACRO(BOOST_NO_CXX14_STD_EXCHANGE); PRINT_MACRO(BOOST_NO_CXX14_VARIABLE_TEMPLATES); PRINT_MACRO(BOOST_NO_CXX17_FOLD_EXPRESSIONS); + PRINT_MACRO(BOOST_NO_CXX17_HDR_OPTIONAL); PRINT_MACRO(BOOST_NO_CXX17_IF_CONSTEXPR); PRINT_MACRO(BOOST_NO_CXX17_INLINE_VARIABLES); PRINT_MACRO(BOOST_NO_CXX17_ITERATOR_TRAITS); @@ -1237,6 +1238,7 @@ void print_boost_macros() + // END GENERATED BLOCK PRINT_MACRO(BOOST_INTEL); diff --git a/test/config_test.cpp b/test/config_test.cpp index c7e4e8a6..b17fd2eb 100644 --- a/test/config_test.cpp +++ b/test/config_test.cpp @@ -1,4 +1,4 @@ -// This file was automatically generated on Wed Apr 18 20:03:40 2018 +// This file was automatically generated on Sat Aug 4 19:11:09 2018 // by libs/config/tools/generate.cpp // Copyright John Maddock 2002-4. // Use, modification and distribution are subject to the @@ -342,6 +342,11 @@ namespace boost_no_cxx14_variable_templates = empty_boost; #else namespace boost_no_cxx17_fold_expressions = empty_boost; #endif +#ifndef BOOST_NO_CXX17_HDR_OPTIONAL +#include "boost_no_cxx17_hdr_optional.ipp" +#else +namespace boost_no_cxx17_hdr_optional = empty_boost; +#endif #ifndef BOOST_NO_CXX17_IF_CONSTEXPR #include "boost_no_cxx17_if_constexpr.ipp" #else @@ -1501,6 +1506,11 @@ int main( int, char *[] ) std::cerr << "Failed test for BOOST_NO_CXX17_FOLD_EXPRESSIONS at: " << __FILE__ << ":" << __LINE__ << std::endl; ++error_count; } + if(0 != boost_no_cxx17_hdr_optional::test()) + { + std::cerr << "Failed test for BOOST_NO_CXX17_HDR_OPTIONAL at: " << __FILE__ << ":" << __LINE__ << std::endl; + ++error_count; + } if(0 != boost_no_cxx17_if_constexpr::test()) { std::cerr << "Failed test for BOOST_NO_CXX17_IF_CONSTEXPR at: " << __FILE__ << ":" << __LINE__ << std::endl; diff --git a/test/no_cxx17_hdr_optional_fail.cpp b/test/no_cxx17_hdr_optional_fail.cpp new file mode 100644 index 00000000..74bac133 --- /dev/null +++ b/test/no_cxx17_hdr_optional_fail.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Sat Aug 4 19:11:09 2018 +// 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_HDR_OPTIONAL +// This file should not compile, if it does then +// BOOST_NO_CXX17_HDR_OPTIONAL should not be defined. +// See file boost_no_cxx17_hdr_optional.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_HDR_OPTIONAL +#include "boost_no_cxx17_hdr_optional.ipp" +#else +#error "this file should not compile" +#endif + +int main( int, char *[] ) +{ + return boost_no_cxx17_hdr_optional::test(); +} + diff --git a/test/no_cxx17_hdr_optional_pass.cpp b/test/no_cxx17_hdr_optional_pass.cpp new file mode 100644 index 00000000..e4a83ef6 --- /dev/null +++ b/test/no_cxx17_hdr_optional_pass.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Sat Aug 4 19:11:08 2018 +// 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_HDR_OPTIONAL +// This file should compile, if it does not then +// BOOST_NO_CXX17_HDR_OPTIONAL should be defined. +// See file boost_no_cxx17_hdr_optional.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_HDR_OPTIONAL +#include "boost_no_cxx17_hdr_optional.ipp" +#else +namespace boost_no_cxx17_hdr_optional = empty_boost; +#endif + +int main( int, char *[] ) +{ + return boost_no_cxx17_hdr_optional::test(); +} +