0)   
11(P2082R1)  |  17  |  19.27*  |  |  6.3  |  2023.1 (partial)*  |  |  |  |  |  |  |  |  12.0   
DR: [ Implicit move ](/w/cpp/language/return "cpp/language/return") for more local objects and rvalue references  |  [ P1825R0 ](https://wg21.link/P1825R0) |  11*  |  13  |  19.24*  |  13.1.6*  |  6.0  |  2021.5  |  |  |  |  |  |  |  20.11  |  12.0   
Allow defaulting comparisons by value  |  [ P1946R0 ](https://wg21.link/P1946R0) |  10  |  10  |  19.25*  |  12.0.0*  |  6.1  |  2021.7  |  |  |  |  |  |  11.0  |  20.11  |  12.0   
Remove ` std::weak_equality ` and ` std::strong_equality ` |  [ P1959R0 ](https://wg21.link/P1959R0) |  10  |  10  |  19.25*  |  12.0.0*  |  6.1  |  2021.7  |  |  |  |  |  |  11.0  |  20.11  |  12.0   
Inconsistencies with non-type template parameters  |  [ P1907R1 ](https://wg21.link/P1907R1) |  10 (partial)   
11  |  18 (partial)*  |  19.26*  |  13.1.6*  (partial)  |  6.2  |  2023.1 (partial)  |  |  |  |  |  |  |  |  12.0   
DR98: Pseudo-destructors end object lifetimes  |  [ P0593R6 ](https://wg21.link/P0593R6) |  11  |  11  |  Yes  |  12.0.5*  |  N/A  |  2023.1*  |  |  |  |  |  |  11.0  |  |  12.0   
DR11: Converting from ` T* ` to  bool  should be considered narrowing  |  [ P1957R2 ](https://wg21.link/P1957R2) |  10*    
11*  |  11  |  19.27*  |  12.0.5*  |  6.1  |  |  |  |  |  |  |  11.0  |  |  12.0   
  
  
C++20 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/20&action=edit&section=T-2
"Template:cpp/compiler support/20") ]  C++20 library features

C++20 feature  
  
|  Paper(s)  
  
|  GCC libstdc++  |  Clang libc++  |  MSVC STL  |  Apple Clang*  |  IBM Open XL C/C++ for AIX*  |  Sun/Oracle C++*  |  Embarcadero C++ Builder*  |   
---|---|---|---|---|---|---|---|---|---  
[ ` std::endian ` ](/w/cpp/types/endian "cpp/types/endian") |  [ P0463R1 ](https://wg21.link/P0463R1) |  8  |  7  |  19.22*  |  10.0.0*  |  |  |   
Extending  [ std::make_shared() ](/w/cpp/memory/shared_ptr/make_shared "cpp/memory/shared ptr/make shared") to support arrays  |  [ P0674R1 ](https://wg21.link/P0674R1) |  12  |  15  |  19.27*  |  14.0.3*  |  |  |   
[ Floating-point atomic ](/w/cpp/atomic/atomic#Specializations_for_floating-point_types "cpp/atomic/atomic") |  [ P0020R6 ](https://wg21.link/P0020R6) |  10  |  18  |  19.22*  |  |  |  |   
[ Synchronized buffered ](/w/cpp/io/basic_syncbuf "cpp/io/basic syncbuf") ( [ ` std::basic_osyncstream ` ](/w/cpp/io/basic_osyncstream "cpp/io/basic osyncstream") )  |  [ P0053R7 ](https://wg21.link/P0053R7) |  11  |  18  |  19.29 (16.10)*  |  |  |  |   
` constexpr ` for [ ` <algorithm> ` ](/w/cpp/header/algorithm "cpp/header/algorithm") and [ ` <utility> ` ](/w/cpp/header/utility "cpp/header/utility") |  [ P0202R3 ](https://wg21.link/P0202R3) |  10  |  8 (partial)   
12  |  19.26*  |  10.0.1*  (partial)   
13.0.0*  |  |  |   
More ` constexpr ` for [ ` <complex> ` ](/w/cpp/header/complex "cpp/header/complex") |  [ P0415R1 ](https://wg21.link/P0415R1) |  9  |  7 (partial)   
16  |  19.27*  |  10.0.0*  (partial)   
15.0.0*  |  |  |   
Make  [ std::memory_order ](/w/cpp/atomic/memory_order "cpp/atomic/memory order") a scoped enumeration  |  [ P0439R0 ](https://wg21.link/P0439R0) |  9  |  9  |  19.25*  |  11.0.3*  |  |  |   
[ String ](/w/cpp/string/basic_string "cpp/string/basic string") [ prefix ](/w/cpp/string/basic_string/starts_with "cpp/string/basic string/starts with") and [ suffix ](/w/cpp/string/basic_string/ends_with "cpp/string/basic string/ends with") checking: [ ` string ` ](/w/cpp/string/basic_string/starts_with "cpp/string/basic string/starts with") [ ` (_view) ` ](/w/cpp/string/basic_string_view/starts_with "cpp/string/basic string view/starts with") [ ` ::starts_with ` ](/w/cp