From 38df8ca0d78b6d14c02cac768f4be6ebfcdadce9 Mon Sep 17 00:00:00 2001 From: Andrey Semashev Date: Wed, 2 Oct 2019 17:16:55 +0300 Subject: [PATCH] Added BOOST_INLINE_VARIABLE macro. The BOOST_INLINE_VARIABLE macro can be used to mark C++17 inline variables in contexts where omitting the inline keyword is still acceptable on older compilers. This commit also adds the missing docs for BOOST_NO_CXX17_INLINE_VARIABLES. --- doc/macro_reference.qbk | 17 ++++++++++++++++- include/boost/config/detail/suffix.hpp | 9 +++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/doc/macro_reference.qbk b/doc/macro_reference.qbk index 8e67f7c8..1c2e77e1 100644 --- a/doc/macro_reference.qbk +++ b/doc/macro_reference.qbk @@ -936,7 +936,7 @@ provide compliant C++14 support. [table [[Macro ][ Description ]] -[[`BOOST_CXX14_CONSTEXPR`][This macro works similar to BOOST_CONSTEXPR, but expands to `constexpr` only if the C++14 "relaxed" `constexpr` is available.]] +[[`BOOST_CXX14_CONSTEXPR`][This macro works similar to `BOOST_CONSTEXPR`, but expands to `constexpr` only if the C++14 "relaxed" `constexpr` is available.]] ] [endsect] @@ -955,6 +955,21 @@ that are not yet supported by a particular compiler or library. [[`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`.]] [[`BOOST_NO_CXX17_IF_CONSTEXPR`][The compiler does not support `if constexpr`.]] +[[`BOOST_NO_CXX17_INLINE_VARIABLES`][The compiler does not support `inline` variables.]] +] + +[endsect] + +[#config_17_for_14] + +[section Macros that allow use of C++17 features with C++14 or earlier compilers] + +The following macros allow use of C++17 features even with compilers that do not yet +provide compliant C++17 support. + +[table +[[Macro ][ Description ]] +[[`BOOST_INLINE_VARIABLE`][This macro expands to `inline` on compilers that support C++17 inline variables and to nothing otherwise. Users may need to check for `BOOST_NO_CXX17_INLINE_VARIABLES` for further adjustments to the code.]] ] [endsect] diff --git a/include/boost/config/detail/suffix.hpp b/include/boost/config/detail/suffix.hpp index 86f6081e..6325050f 100644 --- a/include/boost/config/detail/suffix.hpp +++ b/include/boost/config/detail/suffix.hpp @@ -986,6 +986,15 @@ namespace std{ using ::type_info; } #define BOOST_CXX14_CONSTEXPR constexpr #endif +// +// C++17 inline variables +// +#if !defined(BOOST_NO_CXX17_INLINE_VARIABLES) +#define BOOST_INLINE_VARIABLE inline +#else +#define BOOST_INLINE_VARIABLE +#endif + // // Unused variable/typedef workarounds: //