static_assert  of non-value-dependent expressions in a template context  |  [ CWG2518 ](https://cplusplus.github.io/CWG/issues/2518.html) |  13  |  17  |  16.0*    
(partial)  *  
19.40*  |  |  |  |  |  |  |  |  |  |  |   
  
  
C++23 feature  |    
  
Paper(s)  |  GCC  |  Clang  |  MSVC  |  Apple Clang  |  EDG eccp  |  Intel C++  |  IBM XL C++  |  IBM Open XL C++ for AIX  |  IBM Open XL C++ for z/OS  |  Sun/Oracle C++  |  Embarcadero C++ Builder  |  Cray  |  Nvidia HPC C++ (ex PGI)*  |  Nvidia nvcc   
  
###  [ [ edit
](/mwiki/index.php?title=Template:cpp/compiler_support/23&action=edit&section=T-2
"Template:cpp/compiler support/23") ]  C++23 library features

C++23 feature  
  
|  Paper(s)  
  
|  GCC libstdc++  |  Clang libc++  |  MSVC STL  |  Apple Clang*  |  IBM Open XL C/C++ for AIX*  |  Sun/Oracle C++*  |  Embarcadero C++ Builder*  |   
---|---|---|---|---|---|---|---|---|---  
[ Stacktrace library ](/w/cpp/error#Stacktrace "cpp/error") |  [ P0881R7 ](https://wg21.link/P0881R7)   
[ P2301R1 ](https://wg21.link/P2301R1) |  12 (partial)*    
14*  |  |  19.34*  |  |  |  |   
[ ` <stdatomic.h> ` ](/w/cpp/header/stdatomic.h "cpp/header/stdatomic.h") |  [ P0943R6 ](https://wg21.link/P0943R6) |  12  |  15  |  19.31*  |  14.0.3*  |  |  |   
[ ` std::is_scoped_enum ` ](/w/cpp/types/is_scoped_enum "cpp/types/is scoped enum") |  [ P1048R1 ](https://wg21.link/P1048R1) |  11  |  12  |  19.30*  |  13.0.0*  |  |  |   
[ ` std::basic_string::contains() ` ](/w/cpp/string/basic_string/contains "cpp/string/basic string/contains") , [ ` std::basic_string_view::contains() ` ](/w/cpp/string/basic_string_view/contains "cpp/string/basic string view/contains") |  [ P1679R3 ](https://wg21.link/P1679R3) |  11  |  12  |  19.30*  |  13.0.0*  |  |  |   
[ ` std::to_underlying ` ](/w/cpp/utility/to_underlying "cpp/utility/to underlying") |  [ P1682R3 ](https://wg21.link/P1682R3) |  11  |  13  |  19.30*  |  13.1.6*  |  |  |   
Relaxing requirements for  [ time_point<>::clock ](/w/cpp/chrono/time_point "cpp/chrono/time point") |  [ P2212R2 ](https://wg21.link/P2212R2) |  N/A  |  |  N/A  |  |  |  |   
[ Providing size feedback ](/w/cpp/memory/allocator_traits/allocate_at_least "cpp/memory/allocator traits/allocate at least") in the Allocator interface  |  [ P0401R6 ](https://wg21.link/P0401R6) |  |  15  |  19.30*  |  14.0.3*  |  |  |   
[ ` <spanstream> ` ](/w/cpp/header/spanstream "cpp/header/spanstream") : string-stream with [ ` std::span ` ](/w/cpp/container/span "cpp/container/span") -based buffer  |  [ P0448R4 ](https://wg21.link/P0448R4) |  12  |  |  19.31*  |  |  |  |   
[ ` std::out_ptr() ` ](/w/cpp/memory/out_ptr_t/out_ptr "cpp/memory/out ptr t/out ptr") , [ ` std::inout_ptr() ` ](/w/cpp/memory/inout_ptr_t/inout_ptr "cpp/memory/inout ptr t/inout ptr") |  [ P1132R8 ](https://wg21.link/P1132R8) |  14  |  |  19.30*  |  |  |  |   
` constexpr ` [ ` type_info::operator==() ` ](/w/cpp/types/type_info/operator_cmp "cpp/types/type info/operator cmp") |  [ P1328R1 ](https://wg21.link/P1328R1) |  12  |  17  |  19.33*  *    
19.34*  |  15.0.0*  |  |  |   
Iterator pair constructors for [ ` std::stack ` ](/w/cpp/container/stack/stack "cpp/container/stack/stack") and [ ` std::queue ` ](/w/cpp/container/queue/queue "cpp/container/queue/queue") |  [ P1425R4 ](https://wg21.link/P1425R4) |  12  |  14  |  19.31*  |  14.0.3*  |  |  |   
Non-deduction context for allocators in container deduction guides  |  [ P1518R2 ](https://wg21.link/P1518R2) |  12  |  13  |  19.31*  |  13.1.6*  |  |  |   
[ ` ranges::starts_with() ` ](/w/cpp/algorithm/ranges/starts_with "cpp/algorithm/ranges/starts with") and [ ` ranges::ends_with() ` ](/w/cpp/algorithm/ranges/ends_with "cpp/algorithm/ranges/ends with") |  [ P1659R3 ](https://wg21.link/P1659R3) |  |  17 (partial)*    
18  |  19.31*  |  |  |  |   
Prohibiting  [ std::basic_string ](/w/cpp/string/basic_string "cpp/string/basic string") and  [ std::basic_string_view ](/w/cpp/string/basic_string_view "cpp/string/basic string vie