diff --git a/doc/html/boost_config/acknowledgements.html b/doc/html/boost_config/acknowledgements.html index c6b9bcdf..46747242 100644 --- a/doc/html/boost_config/acknowledgements.html +++ b/doc/html/boost_config/acknowledgements.html @@ -7,6 +7,7 @@ + @@ -45,15 +46,12 @@ configuration.

-
- - -
+
PrevUpHome diff --git a/doc/html/boost_config/boost_macro_reference.html b/doc/html/boost_config/boost_macro_reference.html index cbaa2828..07797661 100644 --- a/doc/html/boost_config/boost_macro_reference.html +++ b/doc/html/boost_config/boost_macro_reference.html @@ -8,6 +8,7 @@ + @@ -47,6 +48,8 @@ that allow use of C++17 features with C++14 or earlier compilers
Macros that describe C++20 features not supported
+
Macros + that describe C++23 features not supported
Macros that describe features that have been removed from the standard.
Boost @@ -501,7 +504,7 @@ The compiler fails to compile a nested class that has a dependent base class:

-
template<typename T>
+
template<typename T>
 struct foo : {
    template<typename U>
    struct bar : public U {};
@@ -526,7 +529,7 @@
                 

Template value parameters cannot have a dependent type, for example:

-
template<class T, typename T::type value>
+
template<class T, typename T::type value>
 class X { ... };
 

@@ -589,7 +592,7 @@ The compiler does not perform function template ordering or its function template ordering is incorrect.

-
// #1
+
// #1
 template<class T> void f(T);
 
 // #2
@@ -1514,7 +1517,7 @@
                   The compiler does not allow a void function to return the result
                   of calling another void function.
 

-
void f() {}
+
void f() {}
 void g() { return f(); }
 

@@ -3521,7 +3524,7 @@ a compile-time integer constant. The macro can be used to specify alignment of types and data:

-
struct BOOST_ALIGNMENT(16) my_data
+
struct BOOST_ALIGNMENT(16) my_data
 {
     char c[16];
 };
@@ -3543,12 +3546,12 @@
                   This macro expands to nothing on those compilers, and constexpr elsewhere. For example,
                   when defining a constexpr function or constructor replace:
 

-
constexpr tuple();
+
constexpr tuple();
 

with:

-
BOOST_CONSTEXPR tuple();
+
BOOST_CONSTEXPR tuple();
 

@@ -3567,12 +3570,12 @@ on those compilers, and constexpr elsewhere. For example, when defining const expr variables replace:

-
static constexpr UIntType xor_mask = a;
+
static constexpr UIntType xor_mask = a;
 

with:

-
static BOOST_CONSTEXPR_OR_CONST UIntType xor_mask = a;
+
static BOOST_CONSTEXPR_OR_CONST UIntType xor_mask = a;
 

@@ -3604,12 +3607,12 @@ BOOST_CONSTEXPR_OR_CONST. For example, when defining const expr variables replace:

-
static constexpr UIntType xor_mask = a;
+
static constexpr UIntType xor_mask = a;
 

with:

-
BOOST_STATIC_CONSTEXPR UIntType xor_mask = a;
+
BOOST_STATIC_CONSTEXPR UIntType xor_mask = a;
 

@@ -3629,7 +3632,7 @@ an inline function definition with the body implementation. For example:

-
struct my_struct
+
struct my_struct
 {
     BOOST_DEFAULTED_FUNCTION(my_struct(), {})
 };
@@ -3637,7 +3640,7 @@
 

is equivalent to:

-
struct my_struct
+
struct my_struct
 {
     my_struct() = default;
 };
@@ -3645,7 +3648,7 @@
 

or:

-
struct my_struct
+
struct my_struct
 {
     my_struct() {}
 };
@@ -3669,7 +3672,7 @@
                   Since the macro may change the access mode, it is recommended to
                   use this macro at the end of the class definition. For example:
 

-
struct noncopyable
+
struct noncopyable
 {
     BOOST_DELETED_FUNCTION(noncopyable(noncopyable const&))
     BOOST_DELETED_FUNCTION(noncopyable& operator= (noncopyable const&))
@@ -3678,7 +3681,7 @@
 

is equivalent to:

-
struct noncopyable
+
struct noncopyable
 {
     noncopyable(noncopyable const&) = delete;
     noncopyable& operator= (noncopyable const&) = delete;
@@ -3687,7 +3690,7 @@
 

or:

-
struct noncopyable
+
struct noncopyable
 {
 private:
     noncopyable(noncopyable const&);
@@ -3702,7 +3705,7 @@
 

-
BOOST_NOEXCEPT
+
BOOST_NOEXCEPT
 BOOST_NOEXCEPT_OR_NOTHROW
 BOOST_NOEXCEPT_IF(Predicate)
 BOOST_NOEXCEPT_EXPR(Expression)
@@ -3719,7 +3722,7 @@
                 

-
#define BOOST_NOEXCEPT
+
#define BOOST_NOEXCEPT
 #define BOOST_NOEXCEPT_OR_NOTHROW throw()
 #define BOOST_NOEXCEPT_IF(Predicate)
 #define BOOST_NOEXCEPT_EXPR(Expression) false
@@ -3735,7 +3738,7 @@
                 

-
#define BOOST_NOEXCEPT noexcept
+
#define BOOST_NOEXCEPT noexcept
 #define BOOST_NOEXCEPT_OR_NOTHROW noexcept
 #define BOOST_NOEXCEPT_IF(Predicate) noexcept((Predicate))
 #define BOOST_NOEXCEPT_EXPR(Expression) noexcept((Expression))
@@ -3835,7 +3838,7 @@
                 

-
struct Foo
+
struct Foo
 {
   int x, y = 42;
 };
@@ -4508,6 +4511,144 @@
 
+

+ The following macros describe features in the 2023 ISO C++ standard, formerly + known as C++2b, that are not yet supported by a particular compiler or library. +

+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Macro +

+
+

+ Description +

+
+

+ BOOST_NO_CXX23_HDR_EXPECTED +

+
+

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

+
+

+ BOOST_NO_CXX23_HDR_FLAT_MAP +

+
+

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

+
+

+ BOOST_NO_CXX23_HDR_FLAT_SET +

+
+

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

+
+

+ BOOST_NO_CXX23_HDR_GENERATOR +

+
+

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

+
+

+ BOOST_NO_CXX23_HDR_MDSPAN +

+
+

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

+
+

+ BOOST_NO_CXX23_HDR_PRINT +

+
+

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

+
+

+ BOOST_NO_CXX23_HDR_SPANSTREAM +

+
+

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

+
+

+ BOOST_NO_CXX23_HDR_STACKTRACE +

+
+

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

+
+

+ BOOST_NO_CXX23_HDR_STDFLOAT +

+
+

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

+
+
+
+ @@ -4656,12 +4797,12 @@ that is not otherwise described by one of the other Boost.Config macros. To use the macro you must first

-
#include <boost/config/workaround.hpp>
+
#include <boost/config/workaround.hpp>
 

usage is then:

-
#if BOOST_WORKAROUND(MACRONAME, CONDITION)
+
#if BOOST_WORKAROUND(MACRONAME, CONDITION)
    // workaround code goes here...
 #else
    // Standard conforming code goes here...
@@ -4704,12 +4845,12 @@
                   in which case one can prevent the function being expanded as a
                   macro using:
 

-
someclass.min BOOST_PREVENT_MACRO_SUBSTITUTION(arg1, arg2);
+
someclass.min BOOST_PREVENT_MACRO_SUBSTITUTION(arg1, arg2);
 

The following also works in most, but not all, contexts:

-
(someclass.max)(arg1, arg2);
+
(someclass.max)(arg1, arg2);
 

@@ -4804,14 +4945,14 @@ gives us a convenient way to declare such constants. For example instead of:

-
struct foo{
+
struct foo{
    static const int value = 2;
 };
 

use:

-
struct foo{
+
struct foo{
    BOOST_STATIC_CONSTANT(int, value = 2);
 };
 
@@ -4843,7 +4984,7 @@ The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through between switch labels:

-
switch (x) {
+
switch (x) {
 case 40:
 case 41:
    if (truth_is_out_there) {
@@ -4901,7 +5042,7 @@
                   instantiations if some of the template parameters don't appear
                   in the function parameter list. For instance:
 

-
#include <iostream>
+
#include <iostream>
 #include <ostream>
 #include <typeinfo>
 
@@ -4925,7 +5066,7 @@
                   the problem without effects on the calling syntax. For instance,
                   in the case above write:
 

-
template <int n>
+
template <int n>
 void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... }
 
 template <typename T>
@@ -5052,7 +5193,7 @@
                 

Usage example:

-
void perform_computation( float* BOOST_RESTRICT in, float* BOOST_RESTRICT out )
+
void perform_computation( float* BOOST_RESTRICT in, float* BOOST_RESTRICT out )
 {
   *out = *in * 0.5f;
 }
@@ -5079,7 +5220,7 @@
                 

Usage example:

-
template<class T>
+
template<class T>
 BOOST_FORCEINLINE T& f(T& t)
 {
     return t;
@@ -5111,7 +5252,7 @@
                 

Usage example:

-
BOOST_NOINLINE void handle_error(const char* descr)
+
BOOST_NOINLINE void handle_error(const char* descr)
 {
     // ...
 }
@@ -5142,7 +5283,7 @@
                 

Usage example:

-
BOOST_NORETURN void on_error_occurred(const char* descr)
+
BOOST_NORETURN void on_error_occurred(const char* descr)
 {
     throw std::runtime_error(descr);
 }
@@ -5181,7 +5322,7 @@
                 

Usage example:

-
if (BOOST_UNLIKELY(ptr == NULL))
+
if (BOOST_UNLIKELY(ptr == NULL))
   handle_error("ptr is NULL");
 

@@ -5250,7 +5391,7 @@

Usage example:

-
struct BOOST_MAY_ALIAS aliasing_struct;
+
struct BOOST_MAY_ALIAS aliasing_struct;
 typedef unsigned int BOOST_MAY_ALIAS aliasing_uint;
 

@@ -5275,7 +5416,7 @@

Example:

-
BOOST_DEPRECATED("Use bar() instead.")
+
BOOST_DEPRECATED("Use bar() instead.")
 void foo();
 
 template< typename T >
@@ -6926,7 +7067,7 @@
                     boundaries. For example, a header-only exception class might
                     look like this:
 

-
class BOOST_SYMBOL_VISIBLE my_exception : public std::runtime_error { ... };
+
class BOOST_SYMBOL_VISIBLE my_exception : public std::runtime_error { ... };
 

Without BOOST_SYMBOL_VISIBLE, it would be impossible to catch @@ -7172,15 +7313,12 @@

- - - -
+
PrevUpHomeNext diff --git a/doc/html/boost_config/build_config.html b/doc/html/boost_config/build_config.html index d897e72e..889e7631 100644 --- a/doc/html/boost_config/build_config.html +++ b/doc/html/boost_config/build_config.html @@ -8,6 +8,7 @@ + @@ -158,15 +159,12 @@ for you to write the test cases yourself.

-
- - -
+

PrevUpHomeNext diff --git a/doc/html/boost_config/cstdint.html b/doc/html/boost_config/cstdint.html index 59e3e5b6..fed216c3 100644 --- a/doc/html/boost_config/cstdint.html +++ b/doc/html/boost_config/cstdint.html @@ -8,6 +8,7 @@ + @@ -284,15 +285,12 @@

-
- - -
+

PrevUpHomeNext diff --git a/doc/html/boost_config/guidelines_for_boost_authors.html b/doc/html/boost_config/guidelines_for_boost_authors.html index bafe7a36..6f2e0773 100644 --- a/doc/html/boost_config/guidelines_for_boost_authors.html +++ b/doc/html/boost_config/guidelines_for_boost_authors.html @@ -8,6 +8,7 @@ + @@ -360,15 +361,12 @@

-
- - -
+

PrevUpHomeNext diff --git a/doc/html/boost_config/rationale.html b/doc/html/boost_config/rationale.html index 2e1bf8a3..27db670b 100644 --- a/doc/html/boost_config/rationale.html +++ b/doc/html/boost_config/rationale.html @@ -8,6 +8,7 @@ + @@ -107,15 +108,12 @@

-
- - -
+

PrevUpHomeNext diff --git a/doc/html/index.html b/doc/html/index.html index f67daac9..f4f3522d 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -6,6 +6,7 @@ + @@ -78,6 +79,8 @@ that allow use of C++17 features with C++14 or earlier compilers
Macros that describe C++20 features not supported
+
Macros + that describe C++23 features not supported
Macros that describe features that have been removed from the standard.
Boost @@ -991,10 +994,7 @@ -
- - -

Last revised: February 22, 2023 at 19:02:21 GMT

+
Next
diff --git a/doc/macro_reference.qbk b/doc/macro_reference.qbk index b9da79f0..80164e25 100644 --- a/doc/macro_reference.qbk +++ b/doc/macro_reference.qbk @@ -1073,6 +1073,26 @@ that are not yet supported by a particular compiler or library. [endsect] +[section Macros that describe C++23 features not supported] + +The following macros describe features in the 2023 ISO C++ standard, formerly known as C++2b, +that are not yet supported by a particular compiler or library. + +[table +[[Macro ][Description ]] +[[`BOOST_NO_CXX23_HDR_EXPECTED`][The compiler does not support the header ``.]] +[[`BOOST_NO_CXX23_HDR_FLAT_MAP`][The compiler does not support the header ``.]] +[[`BOOST_NO_CXX23_HDR_FLAT_SET`][The compiler does not support the header ``.]] +[[`BOOST_NO_CXX23_HDR_GENERATOR`][The compiler does not support the header ``.]] +[[`BOOST_NO_CXX23_HDR_MDSPAN`][The compiler does not support the header ``.]] +[[`BOOST_NO_CXX23_HDR_PRINT`][The compiler does not support the header ``.]] +[[`BOOST_NO_CXX23_HDR_SPANSTREAM`][The compiler does not support the header ``.]] +[[`BOOST_NO_CXX23_HDR_STACKTRACE`][The compiler does not support the header ``.]] +[[`BOOST_NO_CXX23_HDR_STDFLOAT`][The compiler does not support the header ``.]] +] + +[endsect] + [section Macros that describe features that have been removed from the standard.] The following macros describe features which were required by one version of the standard, but have been removed by later versions. diff --git a/include/boost/config/assert_cxx23.hpp b/include/boost/config/assert_cxx23.hpp new file mode 100644 index 00000000..0926b3b5 --- /dev/null +++ b/include/boost/config/assert_cxx23.hpp @@ -0,0 +1,41 @@ +// This file was automatically generated on Sat Sep 9 19:03:28 2023 +// by libs/config/tools/generate.cpp +// Copyright John Maddock 2002-21. +// 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$ +// + +#include +#include + +#ifdef BOOST_NO_CXX23_HDR_EXPECTED +# error "Your compiler appears not to be fully C++23 compliant. Detected via defect macro BOOST_NO_CXX23_HDR_EXPECTED." +#endif +#ifdef BOOST_NO_CXX23_HDR_FLAT_MAP +# error "Your compiler appears not to be fully C++23 compliant. Detected via defect macro BOOST_NO_CXX23_HDR_FLAT_MAP." +#endif +#ifdef BOOST_NO_CXX23_HDR_FLAT_SET +# error "Your compiler appears not to be fully C++23 compliant. Detected via defect macro BOOST_NO_CXX23_HDR_FLAT_SET." +#endif +#ifdef BOOST_NO_CXX23_HDR_GENERATOR +# error "Your compiler appears not to be fully C++23 compliant. Detected via defect macro BOOST_NO_CXX23_HDR_GENERATOR." +#endif +#ifdef BOOST_NO_CXX23_HDR_MDSPAN +# error "Your compiler appears not to be fully C++23 compliant. Detected via defect macro BOOST_NO_CXX23_HDR_MDSPAN." +#endif +#ifdef BOOST_NO_CXX23_HDR_PRINT +# error "Your compiler appears not to be fully C++23 compliant. Detected via defect macro BOOST_NO_CXX23_HDR_PRINT." +#endif +#ifdef BOOST_NO_CXX23_HDR_SPANSTREAM +# error "Your compiler appears not to be fully C++23 compliant. Detected via defect macro BOOST_NO_CXX23_HDR_SPANSTREAM." +#endif +#ifdef BOOST_NO_CXX23_HDR_STACKTRACE +# error "Your compiler appears not to be fully C++23 compliant. Detected via defect macro BOOST_NO_CXX23_HDR_STACKTRACE." +#endif +#ifdef BOOST_NO_CXX23_HDR_STDFLOAT +# error "Your compiler appears not to be fully C++23 compliant. Detected via defect macro BOOST_NO_CXX23_HDR_STDFLOAT." +#endif