Downgrading libcxx to llvmorg-13.0.1

It turns out that llvmorg-14.0.6 might be too new for dyld (the vector base class no longer exist in that release).
This commit is contained in:
Thomas A 2022-06-26 13:05:32 -07:00
parent e3bbeb7fdc
commit a574ade231
3654 changed files with 60517 additions and 166685 deletions

View File

@ -1,4 +0,0 @@
{
"repository.callsign" : "CXX",
"conduit_uri" : "https://reviews.llvm.org/"
}

View File

@ -10,4 +10,7 @@ PointerAlignment: Left
# Disable formatting options which may break tests.
SortIncludes: false
ReflowComments: false
# libc++ has some long names so we need more than the 80 column limit imposed by LLVM style, for sensible formatting
ColumnLimit: 120
---

6
.gitignore vendored
View File

@ -22,12 +22,6 @@ var/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt

View File

@ -10,14 +10,11 @@ endif()
#===============================================================================
cmake_minimum_required(VERSION 3.13.4)
set(LLVM_COMMON_CMAKE_UTILS "${CMAKE_CURRENT_SOURCE_DIR}/../cmake")
# Add path for custom modules
list(INSERT CMAKE_MODULE_PATH 0
set(CMAKE_MODULE_PATH
"${CMAKE_CURRENT_SOURCE_DIR}/cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules"
"${LLVM_COMMON_CMAKE_UTILS}"
"${LLVM_COMMON_CMAKE_UTILS}/Modules"
${CMAKE_MODULE_PATH}
)
set(CMAKE_FOLDER "libc++")
@ -27,32 +24,37 @@ set(LIBCXX_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(LIBCXX_BINARY_INCLUDE_DIR "${LIBCXX_BINARY_DIR}/include/c++build")
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR LIBCXX_STANDALONE_BUILD)
message(WARNING "The Standalone build is deprecated in this release. Please use one of the ways "
"described at https://libcxx.llvm.org/BuildingLibcxx.html for building libc++.")
project(libcxx CXX C)
set(PACKAGE_NAME libcxx)
set(PACKAGE_VERSION 14.0.6)
set(PACKAGE_VERSION 13.0.1)
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
set(PACKAGE_BUGREPORT "llvm-bugs@lists.llvm.org")
# In a standalone build, we don't have llvm to automatically generate the
# llvm-lit script for us. So we need to provide an explicit directory that
# the configurator should write the script into.
set(LIBCXX_STANDALONE_BUILD TRUE)
set(LIBCXX_STANDALONE_BUILD 1)
set(LLVM_LIT_OUTPUT_DIR "${LIBCXX_BINARY_DIR}/bin")
endif()
# Must go below project(..)
include(GNUInstallDirs)
if (LIBCXX_STANDALONE_BUILD)
# Find the LLVM sources and simulate LLVM CMake options.
include(HandleOutOfTreeLLVM)
endif()
if (LIBCXX_STANDALONE_BUILD)
find_package(Python3 COMPONENTS Interpreter)
if(NOT Python3_Interpreter_FOUND)
message(SEND_ERROR "Python3 not found. Python3 is required")
message(WARNING "Python3 not found, using python2 as a fallback")
find_package(Python2 COMPONENTS Interpreter REQUIRED)
if(Python2_VERSION VERSION_LESS 2.7)
message(SEND_ERROR "Python 2.7 or newer is required")
endif()
# Treat python2 as python3
add_executable(Python3::Interpreter IMPORTED)
set_target_properties(Python3::Interpreter PROPERTIES
IMPORTED_LOCATION ${Python2_EXECUTABLE})
set(Python3_EXECUTABLE ${Python2_EXECUTABLE})
endif()
endif()
@ -114,16 +116,6 @@ option(LIBCXX_ENABLE_LOCALIZATION
the C locale API (e.g. embedded). When localization is not supported,
several parts of the library will be disabled: <iostream>, <regex>, <locale>
will be completely unusable, and other parts may be only partly available." ON)
option(LIBCXX_ENABLE_UNICODE
"Whether to include support for Unicode in the library. Disabling Unicode can
be useful when porting to platforms that don't support UTF-8 encoding (e.g.
embedded)." ON)
option(LIBCXX_ENABLE_WIDE_CHARACTERS
"Whether to include support for wide characters in the library. Disabling
wide character support can be useful when porting to platforms that don't
support the C functionality for wide characters. When wide characters are
not supported, several parts of the library will be disabled, notably the
wide character specializations of std::basic_string." ON)
option(LIBCXX_ENABLE_VENDOR_AVAILABILITY_ANNOTATIONS
"Whether to turn on vendor availability annotations on declarations that depend
on definitions in a shared library. By default, we assume that we're not building
@ -135,13 +127,9 @@ option(LIBCXX_ENABLE_INCOMPLETE_FEATURES
"Whether to enable support for incomplete library features. Incomplete features
are new library features under development. These features don't guarantee
ABI stability nor the quality of completed library features. Vendors
shipping the library may want to disable this option." OFF)
set(LIBCXX_TEST_CONFIG "legacy.cfg.in" CACHE STRING
"The path to the Lit testing configuration to use when running the tests.
If a relative path is provided, it is assumed to be relative to '<monorepo>/libcxx/test/configs'.")
if (NOT IS_ABSOLUTE "${LIBCXX_TEST_CONFIG}")
set(LIBCXX_TEST_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/test/configs/${LIBCXX_TEST_CONFIG}")
endif()
shipping the library may want to disable this option." ON)
set(LIBCXX_TEST_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/test/configs/legacy.cfg.in" CACHE STRING
"The Lit testing configuration to use when running the tests.")
set(LIBCXX_TEST_PARAMS "" CACHE STRING
"A list of parameters to run the Lit test suite with.")
@ -202,7 +190,6 @@ endif()
option(LIBCXX_HIDE_FROM_ABI_PER_TU_BY_DEFAULT "Enable per TU ABI insulation by default. To be used by vendors." OFF)
set(LIBCXX_ABI_DEFINES "" CACHE STRING "A semicolon separated list of ABI macros to define in the site config header.")
option(LIBCXX_EXTRA_SITE_DEFINES "Extra defines to add into __config_site")
option(LIBCXX_USE_COMPILER_RT "Use compiler-rt instead of libgcc" OFF)
set(LIBCXX_LIBCPPABI_VERSION "2" CACHE STRING "Version of libc++abi's ABI to re-export from libc++ when re-exporting is enabled.
Note that this is not related to the version of libc++'s ABI itself!")
@ -268,20 +255,7 @@ option(LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS
option(LIBCXXABI_USE_LLVM_UNWINDER "Build and use the LLVM unwinder." OFF)
# Target options --------------------------------------------------------------
option(LIBCXX_BUILD_32_BITS "Build 32 bit multilib libc++. This option is not supported anymore when building the runtimes. Please specify a full triple instead." ${LLVM_BUILD_32_BITS})
if (LIBCXX_BUILD_32_BITS)
message(FATAL_ERROR "LIBCXX_BUILD_32_BITS is not supported anymore when building the runtimes, please specify a full triple instead.")
endif()
if(NOT CMAKE_SYSROOT AND LIBCXX_SYSROOT)
message(WARNING "LIBCXX_SYSROOT is deprecated, please use CMAKE_SYSROOT instead")
endif()
if(NOT CMAKE_CXX_COMPILER_TARGET AND LIBCXX_TARGET_TRIPLE)
message(WARNING "LIBCXX_TARGET_TRIPLE is deprecated, please use CMAKE_CXX_COMPILER_TARGET instead")
endif()
if(NOT CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN AND LIBCXX_GCC_TOOLCHAIN)
message(WARNING "LIBCXX_GCC_TOOLCHAIN is deprecated, please use CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN instead")
endif()
option(LIBCXX_BUILD_32_BITS "Build 32 bit libc++." ${LLVM_BUILD_32_BITS})
if(CMAKE_CXX_COMPILER_TARGET)
set(LIBCXX_DEFAULT_TARGET_TRIPLE "${CMAKE_CXX_COMPILER_TARGET}")
@ -295,7 +269,11 @@ set(LIBCXX_GCC_TOOLCHAIN "${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}" CACHE STRING
# Feature options -------------------------------------------------------------
option(LIBCXX_ENABLE_EXCEPTIONS "Use exceptions." ON)
option(LIBCXX_ENABLE_RTTI "Use run time type information." ON)
option(LIBCXX_ENABLE_GLOBAL_FILESYSTEM_NAMESPACE "Build libc++ with support for the global filesystem namespace." ON)
option(LIBCXX_ENABLE_STDIN "Build libc++ with support for stdin/std::cin." ON)
option(LIBCXX_ENABLE_STDOUT "Build libc++ with support for stdout/std::cout." ON)
option(LIBCXX_ENABLE_THREADS "Build libc++ with support for threads." ON)
option(LIBCXX_ENABLE_THREAD_UNSAFE_C_FUNCTIONS "Build libc++ with support for thread-unsafe C functions" ON)
option(LIBCXX_ENABLE_MONOTONIC_CLOCK
"Build libc++ with support for a monotonic clock.
This option may only be set to OFF when LIBCXX_ENABLE_THREADS=OFF." ON)
@ -393,6 +371,16 @@ if (LLVM_USE_SANITIZER AND LIBCXX_GENERATE_COVERAGE)
message(FATAL_ERROR "LLVM_USE_SANITIZER cannot be used with LIBCXX_GENERATE_COVERAGE")
endif()
# Set LIBCXX_BUILD_32_BITS to (LIBCXX_BUILD_32_BITS OR LLVM_BUILD_32_BITS)
# and check that we can build with 32 bits if requested.
if (CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32)
if (LIBCXX_BUILD_32_BITS AND NOT LLVM_BUILD_32_BITS) # Don't duplicate the output from LLVM
message(STATUS "Building 32 bits executables and libraries.")
endif()
elseif(LIBCXX_BUILD_32_BITS)
message(FATAL_ERROR "LIBCXX_BUILD_32_BITS=ON is not supported on this platform.")
endif()
# Warn users that LIBCXX_ENABLE_STATIC_ABI_LIBRARY is an experimental option.
if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY)
message(WARNING "LIBCXX_ENABLE_STATIC_ABI_LIBRARY is an experimental option")
@ -426,35 +414,38 @@ endif ()
# TODO: Projects that depend on libc++ should use LIBCXX_GENERATED_INCLUDE_DIR
# instead of hard-coding include/c++/v1.
set(LIBCXX_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}/c++/v1" CACHE PATH
"Path where target-agnostic libc++ headers should be installed.")
set(LIBCXX_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
"Path where built libc++ runtime libraries should be installed.")
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LLVM_BINARY_DIR}/include/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1")
set(LIBCXX_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
"Path where built libc++ libraries should be installed.")
set(LIBCXX_INSTALL_INCLUDE_TARGET_DIR "${CMAKE_INSTALL_INCLUDEDIR}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1" CACHE PATH
set(LIBCXX_INSTALL_INCLUDE_DIR "include/c++/v1" CACHE PATH
"Path where target-agnostic libc++ headers should be installed.")
set(LIBCXX_INSTALL_INCLUDE_TARGET_DIR "include/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1" CACHE PATH
"Path where target-specific libc++ headers should be installed.")
if(LIBCXX_LIBDIR_SUBDIR)
string(APPEND LIBCXX_LIBRARY_DIR /${LIBCXX_LIBDIR_SUBDIR})
string(APPEND LIBCXX_INSTALL_LIBRARY_DIR /${LIBCXX_LIBDIR_SUBDIR})
endif()
else()
if(LLVM_LIBRARY_OUTPUT_INTDIR)
set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
else()
set(LIBCXX_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXX_LIBDIR_SUFFIX})
set(LIBCXX_GENERATED_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/c++/v1")
endif()
elseif(LLVM_LIBRARY_OUTPUT_INTDIR)
set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LIBCXX_GENERATED_INCLUDE_DIR}")
set(LIBCXX_INSTALL_LIBRARY_DIR lib${LIBCXX_LIBDIR_SUFFIX} CACHE PATH
"Path where built libc++ libraries should be installed.")
set(LIBCXX_INSTALL_INCLUDE_DIR "include/c++/v1" CACHE PATH
"Path where target-agnostic libc++ headers should be installed.")
set(LIBCXX_INSTALL_INCLUDE_TARGET_DIR "${LIBCXX_INSTALL_INCLUDE_DIR}" CACHE PATH
"Path where target-specific libc++ headers should be installed.")
else()
set(LIBCXX_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXX_LIBDIR_SUFFIX})
set(LIBCXX_GENERATED_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/c++/v1")
set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LIBCXX_GENERATED_INCLUDE_DIR}")
set(LIBCXX_INSTALL_LIBRARY_DIR lib${LIBCXX_LIBDIR_SUFFIX} CACHE PATH
"Path where built libc++ libraries should be installed.")
set(LIBCXX_INSTALL_INCLUDE_DIR "include/c++/v1" CACHE PATH
"Path where target-agnostic libc++ headers should be installed.")
set(LIBCXX_INSTALL_INCLUDE_TARGET_DIR "${LIBCXX_INSTALL_INCLUDE_DIR}" CACHE PATH
"Path where target-specific libc++ headers should be installed.")
endif()
@ -482,9 +473,7 @@ include(HandleLibcxxFlags)
# These flags get added to CMAKE_CXX_FLAGS and CMAKE_C_FLAGS so that
# 'config-ix' use them during feature checks. It also adds them to both
# 'LIBCXX_COMPILE_FLAGS' and 'LIBCXX_LINK_FLAGS'
if(ZOS)
add_target_flags_if_supported("-fzos-le-char-mode=ebcdic")
endif()
add_target_flags_if(LIBCXX_BUILD_32_BITS "-m32")
if(LIBCXX_TARGET_TRIPLE)
add_target_flags_if_supported("--target=${LIBCXX_TARGET_TRIPLE}")
endif()
@ -541,7 +530,7 @@ function(cxx_add_basic_build_flags target)
# in the dylib. C++20 is needed to use char8_t.
set_target_properties(${target} PROPERTIES
CXX_STANDARD 20
CXX_STANDARD_REQUIRED YES
CXX_STANDARD_REQUIRED NO
CXX_EXTENSIONS NO)
# When building the dylib, don't warn for unavailable aligned allocation
@ -607,13 +596,13 @@ function(cxx_add_warning_flags target)
endif()
target_add_compile_flags_if_supported(${target} PRIVATE -Wextra -W -Wwrite-strings
-Wno-unused-parameter -Wno-long-long
-Werror=return-type -Wextra-semi -Wundef
-Wformat-nonliteral)
-Werror=return-type -Wextra-semi -Wundef)
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
target_add_compile_flags_if_supported(${target} PRIVATE
-Wno-user-defined-literals
-Wno-covered-switch-default
-Wno-suggest-override
-Wno-ignored-attributes # FIXME: Caused by _LIBCPP_NODEBUG_TYPE not being supported on older clangs
)
if (LIBCXX_TARGETING_CLANG_CL)
target_add_compile_flags_if_supported(${target} PRIVATE
@ -776,13 +765,6 @@ function(cxx_link_system_libraries target)
target_add_link_flags_if_supported(${target} PRIVATE "/nodefaultlib")
endif()
if (LIBCXX_SUPPORTS_UNWINDLIB_NONE_FLAG AND LIBCXXABI_USE_LLVM_UNWINDER)
# If we're linking directly against the libunwind that we're building
# in the same invocation, don't try to link in the toolchain's
# default libunwind (which may be missing still).
target_add_link_flags_if_supported(${target} PRIVATE "--unwindlib=none")
endif()
if (LIBCXX_HAS_SYSTEM_LIB)
target_link_libraries(${target} PRIVATE System)
endif()
@ -885,8 +867,12 @@ config_define_if(LIBCXX_ABI_UNSTABLE _LIBCPP_ABI_UNSTABLE)
config_define_if(LIBCXX_ABI_FORCE_ITANIUM _LIBCPP_ABI_FORCE_ITANIUM)
config_define_if(LIBCXX_ABI_FORCE_MICROSOFT _LIBCPP_ABI_FORCE_MICROSOFT)
config_define_if(LIBCXX_HIDE_FROM_ABI_PER_TU_BY_DEFAULT _LIBCPP_HIDE_FROM_ABI_PER_TU_BY_DEFAULT)
config_define_if_not(LIBCXX_ENABLE_GLOBAL_FILESYSTEM_NAMESPACE _LIBCPP_HAS_NO_GLOBAL_FILESYSTEM_NAMESPACE)
config_define_if_not(LIBCXX_ENABLE_STDIN _LIBCPP_HAS_NO_STDIN)
config_define_if_not(LIBCXX_ENABLE_STDOUT _LIBCPP_HAS_NO_STDOUT)
config_define_if_not(LIBCXX_ENABLE_THREADS _LIBCPP_HAS_NO_THREADS)
config_define_if_not(LIBCXX_ENABLE_MONOTONIC_CLOCK _LIBCPP_HAS_NO_MONOTONIC_CLOCK)
config_define_if_not(LIBCXX_ENABLE_THREAD_UNSAFE_C_FUNCTIONS _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS)
if (NOT LIBCXX_TYPEINFO_COMPARISON_IMPLEMENTATION STREQUAL "default")
config_define("${LIBCXX_TYPEINFO_COMPARISON_IMPLEMENTATION}" _LIBCPP_TYPEINFO_COMPARISON_IMPLEMENTATION)
endif()
@ -900,8 +886,6 @@ config_define_if(LIBCXX_ENABLE_PARALLEL_ALGORITHMS _LIBCPP_HAS_PARALLEL_ALGORITH
config_define_if_not(LIBCXX_ENABLE_FILESYSTEM _LIBCPP_HAS_NO_FILESYSTEM_LIBRARY)
config_define_if_not(LIBCXX_ENABLE_RANDOM_DEVICE _LIBCPP_HAS_NO_RANDOM_DEVICE)
config_define_if_not(LIBCXX_ENABLE_LOCALIZATION _LIBCPP_HAS_NO_LOCALIZATION)
config_define_if_not(LIBCXX_ENABLE_UNICODE _LIBCPP_HAS_NO_UNICODE)
config_define_if_not(LIBCXX_ENABLE_WIDE_CHARACTERS _LIBCPP_HAS_NO_WIDE_CHARACTERS)
config_define_if_not(LIBCXX_ENABLE_VENDOR_AVAILABILITY_ANNOTATIONS _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS)
# Incomplete features get their own specific disabling flags. This makes it
# easier to grep for target specific flags once the feature is complete.
@ -920,17 +904,6 @@ if (LIBCXX_ABI_DEFINES)
config_define(${abi_defines} _LIBCPP_ABI_DEFINES)
endif()
if (LIBCXX_EXTRA_SITE_DEFINES)
set(extra_site_defines)
foreach (extra_site_define ${LIBCXX_EXTRA_SITE_DEFINES})
# Allow defines such as DEFINE=VAL, transformed into "#define DEFINE VAL".
string(REPLACE "=" " " extra_site_define "${extra_site_define}")
list(APPEND extra_site_defines "#define ${extra_site_define}")
endforeach()
string(REPLACE ";" "\n" extra_site_defines "${extra_site_defines}")
config_define(${extra_site_defines} _LIBCPP_EXTRA_SITE_DEFINES)
endif()
# By default libc++ on Windows expects to use a shared library, which requires
# the headers to use DLL import/export semantics. However when building a
# static library only we modify the headers to disable DLL import/export.

View File

@ -12,13 +12,6 @@ N: Saleem Abdulrasool
E: compnerd@compnerd.org
D: Minor patches and Linux fixes.
N: Ulf Adams
D: Invented the Ryu and Ryu Printf algorithms used in floating-point to_chars, and wrote the initial code.
N: Muiez Ahmed
E: muiez@ibm.com
D: z/OS port.
N: Dan Albert
E: danalbert@google.com
D: Android support and test runner improvements.
@ -31,8 +24,9 @@ N: Holger Arnold
E: holgerar@gmail.com
D: Minor fix.
N: Jorg Brown
D: Ported floating-point to_chars from MSVC to libc++.
N: Ruben Van Boxem
E: vanboxem dot ruben at gmail dot com
D: Initial Windows patches.
N: David Chisnall
E: theraven at theravensnest dot org
@ -47,10 +41,6 @@ N: Jonathan B Coe
E: jbcoe@me.com
D: Implementation of propagate_const.
N: Matthew Dempsky
E: matthew@dempsky.org
D: Minor patches and bug fixes.
N: Christopher Di Bella
E: cjdb@google.com
E: cjdb.ns@gmail.com
@ -68,6 +58,10 @@ N: Bill Fisher
E: william.w.fisher@gmail.com
D: Regex bug fixes.
N: Matthew Dempsky
E: matthew@dempsky.org
D: Minor patches and bug fixes.
N: Google Inc.
D: Copyright owner and contributor of the CityHash algorithm
@ -87,14 +81,6 @@ N: Argyrios Kyrtzidis
E: kyrtzidis@apple.com
D: Bug fixes.
N: Stephan T. Lavavej
E: stl@microsoft.com
E: stl@nuwen.net
D: Implemented floating-point to_chars.
N: Microsoft Corporation
D: Contributed floating-point to_chars.
N: Bruce Mitchener, Jr.
E: bruce.mitchener@gmail.com
D: Emscripten-related changes.
@ -127,10 +113,6 @@ N: Jon Roelofs
E: jroelofS@jroelofs.com
D: Remote testing, Newlib port, baremetal/single-threaded support.
N: Kent Ross
E: k@mad.cash
D: Patches for operator<=> support
N: Jonathan Sauer
D: Minor patches, mostly related to constexpr
@ -149,10 +131,6 @@ N: Stephan Tolksdorf
E: st@quanttec.com
D: Minor <atomic> fix
N: Ruben Van Boxem
E: vanboxem dot ruben at gmail dot com
D: Initial Windows patches.
N: Michael van der Westhuizen
E: r1mikey at gmail dot com
@ -163,11 +141,6 @@ N: Klaas de Vries
E: klaas at klaasgaaf dot nl
D: Minor bug fix.
N: Mark de Wever
E: koraq at xs4all dot nl
D: Format library support.
D: Finalized the porting of MSVC's to_chars to libc++.
N: Zhang Xiongpang
E: zhangxiongpang@gmail.com
D: Minor patches and bug fixes.
@ -176,11 +149,11 @@ N: Xing Xue
E: xingxue@ca.ibm.com
D: AIX port
N: Zhihao Yuan
E: lichray@gmail.com
D: Standard compatibility fixes.
N: Jeffrey Yasskin
E: jyasskin@gmail.com
E: jyasskin@google.com
D: Linux fixes.
N: Zhihao Yuan
E: lichray@gmail.com
D: Standard compatibility fixes.

View File

@ -16,8 +16,60 @@ Test Suite Tasks
* Improve the quality and portability of the locale test data.
* Convert failure tests to use Clang Verify.
Filesystem Tasks
================
* P0492r2 - Implement National body comments for Filesystem
* INCOMPLETE - US 25: has_filename() is equivalent to just !empty()
* INCOMPLETE - US 31: Everything is defined in terms of one implicit host system
* INCOMPLETE - US 32: Meaning of 27.10.2.1 unclear
* INCOMPLETE - US 33: Definition of canonical path problematic
* INCOMPLETE - US 34: Are there attributes of a file that are not an aspect of the file system?
* INCOMPLETE - US 35: What synchronization is required to avoid a file system race?
* INCOMPLETE - US 36: Symbolic links themselves are attached to a directory via (hard) links
* INCOMPLETE - US 37: The term “redundant current directory (dot) elements” is not defined
* INCOMPLETE - US 38: Duplicates §17.3.16
* INCOMPLETE - US 39: Remove note: Dot and dot-dot are not directories
* INCOMPLETE - US 40: Not all directories have a parent.
* INCOMPLETE - US 41: The term “parent directory” for a (non-directory) file is unusual
* INCOMPLETE - US 42: Pathname resolution does not always resolve a symlink
* INCOMPLETE - US 43: Concerns about encoded character types
* INCOMPLETE - US 44: Definition of path in terms of a string requires leaky abstraction
* INCOMPLETE - US 45: Generic format portability compromised by unspecified root-name
* INCOMPLETE - US 46: filename can be empty so productions for relative-path are redundant
* INCOMPLETE - US 47: “.” and “..” already match the name production
* INCOMPLETE - US 48: Multiple separators are often meaningful in a root-name
* INCOMPLETE - US 49: What does “method of conversion method” mean?
* INCOMPLETE - US 50: 27.10.8.1 ¶ 1.4 largely redundant with ¶ 1.3
* INCOMPLETE - US 51: Failing to add / when appending empty string prevents useful apps
* INCOMPLETE - US 52: remove_filename() postcondition is not by itself a definition
* INCOMPLETE - US 53: remove_filename()'s name does not correspond to its behavior
* INCOMPLETE - US 54: remove_filename() is broken
* INCOMPLETE - US 55: replace_extension()'s use of path as parameter is inappropriate
* INCOMPLETE - US 56: Remove replace_extension()'s conditional addition of period
* INCOMPLETE - US 57: On Windows, absolute paths will sort in among relative paths
* INCOMPLETE - US 58: parent_path() behavior for root paths is useless
* INCOMPLETE - US 59: filename() returning path for single path components is bizarre
* INCOMPLETE - US 60: path("/foo/").filename()==path(".") is surprising
* INCOMPLETE - US 61: Leading dots in filename() should not begin an extension
* INCOMPLETE - US 62: It is important that stem()+extension()==filename()
* INCOMPLETE - US 63: lexically_normal() inconsistently treats trailing "/" but not "/.." as directory
* INCOMPLETE - US 73, CA 2: root-name is effectively implementation defined
* INCOMPLETE - US 74, CA 3: The term “pathname” is ambiguous in some contexts
* INCOMPLETE - US 75, CA 4: Extra flag in path constructors is needed
* INCOMPLETE - US 76, CA 5: root-name definition is over-specified.
* INCOMPLETE - US 77, CA 6: operator/ and other appends not useful if arg has root-name
* INCOMPLETE - US 78, CA 7: Member absolute() in 27.10.4.1 is overspecified for non-POSIX-like O/S
* INCOMPLETE - US 79, CA 8: Some operation functions are overspecified for implementation-defined file types
* INCOMPLETE - US 185: Fold error_code and non-error_code signatures into one signature
* INCOMPLETE - FI 14: directory_entry comparisons are members
* INCOMPLETE - Late 36: permissions() error_code overload should be noexcept
* INCOMPLETE - Late 37: permissions() actions should be separate parameter
* INCOMPLETE - Late 42: resize_file() Postcondition missing argument
Misc Tasks
==========
* Find all sequences of >2 underscores and eradicate them.
* run clang-tidy on libc++
* Document the "conditionally-supported" bits of libc++
* Look at basic_string's move assignment operator, re LWG 2063 and POCMA
* Put a static_assert in std::allocator to deny const/volatile types (LWG 2447)

View File

@ -1,14 +1,3 @@
if (CMAKE_VERSION VERSION_LESS 3.17)
message(WARNING "The libc++ benchmarks won't be available because the version of CMake is too old to support them.")
return()
endif()
if (LIBCXX_STANDALONE_BUILD)
message(WARNING "The libc++ benchmarks are not available in a standalone build. Please migrate to an official build "
"as documented in https://libcxx.llvm.org/BuildingLibcxx.html.")
return()
endif()
include(ExternalProject)
include(CheckCXXCompilerFlag)
@ -41,7 +30,7 @@ ExternalProject_Add(google-benchmark-libcxx
EXCLUDE_FROM_ALL ON
DEPENDS cxx cxx-headers
PREFIX benchmark-libcxx
SOURCE_DIR ${LLVM_THIRD_PARTY_DIR}/benchmark
SOURCE_DIR ${LIBCXX_SOURCE_DIR}/utils/google-benchmark
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/benchmark-libcxx
CMAKE_CACHE_ARGS
-DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER}
@ -58,7 +47,7 @@ ExternalProject_Add(google-benchmark-libcxx
set(BENCHMARK_NATIVE_TARGET_FLAGS)
if (LIBCXX_BENCHMARK_NATIVE_GCC_TOOLCHAIN)
set(BENCHMARK_NATIVE_TARGET_FLAGS
--gcc-toolchain=${LIBCXX_BENCHMARK_NATIVE_GCC_TOOLCHAIN})
-gcc-toolchain ${LIBCXX_BENCHMARK_NATIVE_GCC_TOOLCHAIN})
endif()
split_list(BENCHMARK_NATIVE_TARGET_FLAGS)
@ -66,7 +55,7 @@ if (LIBCXX_BENCHMARK_NATIVE_STDLIB)
ExternalProject_Add(google-benchmark-native
EXCLUDE_FROM_ALL ON
PREFIX benchmark-native
SOURCE_DIR ${LLVM_THIRD_PARTY_DIR}/benchmark
SOURCE_DIR ${LIBCXX_SOURCE_DIR}/utils/google-benchmark
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/benchmark-native
CMAKE_CACHE_ARGS
-DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER}
@ -86,42 +75,56 @@ set(BENCHMARK_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(BENCHMARK_LIBCXX_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/benchmark-libcxx)
set(BENCHMARK_NATIVE_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/benchmark-native)
add_library( cxx-benchmarks-flags INTERFACE)
target_compile_features( cxx-benchmarks-flags INTERFACE cxx_std_20)
target_compile_options( cxx-benchmarks-flags INTERFACE -O2 -fsized-deallocation -nostdinc++)
target_include_directories(cxx-benchmarks-flags INTERFACE "${LIBCXX_GENERATED_INCLUDE_DIR}"
INTERFACE "${BENCHMARK_LIBCXX_INSTALL}/include"
INTERFACE "${LIBCXX_SOURCE_DIR}/test/support")
add_library( cxx-benchmarks-flags-native INTERFACE)
target_link_libraries( cxx-benchmarks-flags-native INTERFACE cxx-benchmarks-flags)
target_compile_options(cxx-benchmarks-flags-native INTERFACE ${BENCHMARK_NATIVE_TARGET_FLAGS})
target_link_options( cxx-benchmarks-flags-native INTERFACE ${BENCHMARK_NATIVE_TARGET_FLAGS} "-L${BENCHMARK_NATIVE_INSTALL}/lib")
set(BENCHMARK_TEST_COMPILE_FLAGS
-O2
-fsized-deallocation
-I${BENCHMARK_LIBCXX_INSTALL}/include
-I${LIBCXX_SOURCE_DIR}/test/support
)
set(BENCHMARK_TEST_LIBCXX_COMPILE_FLAGS
${BENCHMARK_TEST_COMPILE_FLAGS}
${SANITIZER_FLAGS}
-Wno-user-defined-literals
-Wno-suggest-override
)
set(BENCHMARK_TEST_LIBCXX_LINK_FLAGS
-nodefaultlibs
-L${BENCHMARK_LIBCXX_INSTALL}/lib/
${SANITIZER_FLAGS}
)
set(BENCHMARK_TEST_NATIVE_COMPILE_FLAGS
${BENCHMARK_NATIVE_TARGET_FLAGS}
${BENCHMARK_TEST_COMPILE_FLAGS}
)
set(BENCHMARK_TEST_NATIVE_LINK_FLAGS
${BENCHMARK_NATIVE_TARGET_FLAGS}
-L${BENCHMARK_NATIVE_INSTALL}/lib
)
split_list(BENCHMARK_TEST_COMPILE_FLAGS)
split_list(BENCHMARK_TEST_LIBCXX_COMPILE_FLAGS)
split_list(BENCHMARK_TEST_LIBCXX_LINK_FLAGS)
split_list(BENCHMARK_TEST_NATIVE_COMPILE_FLAGS)
split_list(BENCHMARK_TEST_NATIVE_LINK_FLAGS)
if (LIBCXX_BENCHMARK_NATIVE_STDLIB STREQUAL "libstdc++")
find_library(LIBSTDCXX_FILESYSTEM_TEST stdc++fs
PATHS ${LIBCXX_BENCHMARK_NATIVE_GCC_TOOLCHAIN}
PATH_SUFFIXES lib lib64
DOC "The libstdc++ filesystem library used by the benchmarks"
)
if (LIBSTDCXX_FILESYSTEM_TEST)
target_link_libraries(cxx-benchmarks-flags-native INTERFACE -lstdc++fs)
endif()
else()
target_link_libraries(cxx-benchmarks-flags-native INTERFACE -lc++fs -lc++experimental)
if (NOT "${LIBSTDCXX_FILESYSTEM_TEST}" STREQUAL "LIBSTDCXX_FILESYSTEM_TEST-NOTFOUND")
set(LIBSTDCXX_FILESYSTEM_LIB "stdc++fs")
endif()
endif()
add_library( cxx-benchmarks-flags-libcxx INTERFACE)
target_link_libraries( cxx-benchmarks-flags-libcxx INTERFACE cxx-benchmarks-flags)
target_compile_options(cxx-benchmarks-flags-libcxx INTERFACE ${SANITIZER_FLAGS} -Wno-user-defined-literals -Wno-suggest-override)
target_link_options( cxx-benchmarks-flags-libcxx INTERFACE -nodefaultlibs "-L${BENCHMARK_LIBCXX_INSTALL}/lib" ${SANITIZER_FLAGS})
set(libcxx_benchmark_targets)
function(add_benchmark_test name source_file)
set(libcxx_target ${name}_libcxx)
list(APPEND libcxx_benchmark_targets ${libcxx_target})
add_executable(${libcxx_target} EXCLUDE_FROM_ALL ${source_file})
target_link_libraries(${libcxx_target} PRIVATE cxx-benchmarks-flags-libcxx)
add_dependencies(${libcxx_target} cxx google-benchmark-libcxx)
add_dependencies(cxx-benchmarks ${libcxx_target})
if (LIBCXX_ENABLE_SHARED)
@ -140,15 +143,27 @@ function(add_benchmark_test name source_file)
PROPERTIES
OUTPUT_NAME "${name}.libcxx.out"
RUNTIME_OUTPUT_DIRECTORY "${BENCHMARK_OUTPUT_DIR}"
COMPILE_FLAGS "${BENCHMARK_TEST_LIBCXX_COMPILE_FLAGS}"
LINK_FLAGS "${BENCHMARK_TEST_LIBCXX_LINK_FLAGS}"
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS NO)
cxx_link_system_libraries(${libcxx_target})
if (LIBCXX_BENCHMARK_NATIVE_STDLIB)
if (LIBCXX_BENCHMARK_NATIVE_STDLIB STREQUAL "libstdc++" AND NOT DEFINED LIBSTDCXX_FILESYSTEM_LIB
AND "${name}" STREQUAL "filesystem")
return()
endif()
set(native_target ${name}_native)
add_executable(${native_target} EXCLUDE_FROM_ALL ${source_file})
target_link_libraries(${native_target} PRIVATE cxx-benchmarks-flags-native)
add_dependencies(${native_target} google-benchmark-native
google-benchmark-libcxx)
target_link_libraries(${native_target} PRIVATE -lbenchmark)
if (LIBCXX_BENCHMARK_NATIVE_STDLIB STREQUAL "libstdc++")
target_link_libraries(${native_target} PRIVATE ${LIBSTDCXX_FILESYSTEM_LIB})
elseif (LIBCXX_BENCHMARK_NATIVE_STDLIB STREQUAL "libc++")
target_link_libraries(${native_target} PRIVATE -lc++fs -lc++experimental)
endif()
if (LIBCXX_HAS_PTHREAD_LIB)
target_link_libraries(${native_target} PRIVATE -pthread)
endif()
@ -157,6 +172,11 @@ function(add_benchmark_test name source_file)
PROPERTIES
OUTPUT_NAME "${name}.native.out"
RUNTIME_OUTPUT_DIRECTORY "${BENCHMARK_OUTPUT_DIR}"
INCLUDE_DIRECTORIES ""
COMPILE_FLAGS "${BENCHMARK_TEST_NATIVE_COMPILE_FLAGS}"
LINK_FLAGS "${BENCHMARK_TEST_NATIVE_LINK_FLAGS}"
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS NO)
endif()
endfunction()
@ -166,11 +186,6 @@ endfunction()
# Register Benchmark tests
#==============================================================================
file(GLOB BENCHMARK_TESTS "*.bench.cpp")
if (NOT LIBCXX_ENABLE_INCOMPLETE_FEATURES)
list(FILTER BENCHMARK_TESTS EXCLUDE REGEX "(format_to_n|format_to|format|formatted_size|formatter_float|std_format_spec_string_unicode).bench.cpp")
endif()
foreach(test_path ${BENCHMARK_TESTS})
get_filename_component(test_file "${test_path}" NAME)
string(REPLACE ".bench.cpp" "" test_name "${test_file}")

View File

@ -36,9 +36,10 @@ inline char getRandomChar() {
}
template <class IntT>
inline IntT getRandomInteger(IntT Min, IntT Max) {
std::uniform_int_distribution<unsigned long long> dist(Min, Max);
return static_cast<IntT>(dist(getRandomEngine()));
inline IntT getRandomInteger(IntT Min = 0,
IntT Max = std::numeric_limits<IntT>::max()) {
std::uniform_int_distribution<IntT> dist(Min, Max);
return dist(getRandomEngine());
}
inline std::string getRandomString(std::size_t Len) {
@ -101,7 +102,7 @@ template <class IntT>
std::vector<IntT> getRandomIntegerInputs(size_t N) {
std::vector<IntT> inputs;
for (size_t i=0; i < N; ++i) {
inputs.push_back(getRandomInteger<IntT>(0, std::numeric_limits<IntT>::max()));
inputs.push_back(getRandomInteger<IntT>());
}
return inputs;
}

View File

@ -38,65 +38,18 @@ enum class Order {
Descending,
SingleElement,
PipeOrgan,
Heap,
QuickSortAdversary,
Heap
};
struct AllOrders : EnumValuesAsTuple<AllOrders, Order, 7> {
struct AllOrders : EnumValuesAsTuple<AllOrders, Order, 6> {
static constexpr const char* Names[] = {"Random", "Ascending",
"Descending", "SingleElement",
"PipeOrgan", "Heap",
"QuickSortAdversary"};
"PipeOrgan", "Heap"};
};
// fillAdversarialQuickSortInput fills the input vector with N int-like values.
// These values are arranged in such a way that they would invoke O(N^2)
// behavior on any quick sort implementation that satisifies certain conditions.
// Details are available in the following paper:
// "A Killer Adversary for Quicksort", M. D. McIlroy, Software—Practice &
// ExperienceVolume 29 Issue 4 April 10, 1999 pp 341344.
// https://dl.acm.org/doi/10.5555/311868.311871.
template <class T>
void fillAdversarialQuickSortInput(T& V, size_t N) {
assert(N > 0);
// If an element is equal to gas, it indicates that the value of the element
// is still to be decided and may change over the course of time.
const int gas = N - 1;
V.resize(N);
for (int i = 0; i < N; ++i) {
V[i] = gas;
}
// Candidate for the pivot position.
int candidate = 0;
int nsolid = 0;
// Populate all positions in the generated input to gas.
std::vector<int> ascVals(V.size());
// Fill up with ascending values from 0 to V.size()-1. These will act as
// indices into V.
std::iota(ascVals.begin(), ascVals.end(), 0);
std::sort(ascVals.begin(), ascVals.end(), [&](int x, int y) {
if (V[x] == gas && V[y] == gas) {
// We are comparing two inputs whose value is still to be decided.
if (x == candidate) {
V[x] = nsolid++;
} else {
V[y] = nsolid++;
}
}
if (V[x] == gas) {
candidate = x;
} else if (V[y] == gas) {
candidate = y;
}
return V[x] < V[y];
});
}
template <typename T>
void fillValues(std::vector<T>& V, size_t N, Order O) {
if (O == Order::SingleElement) {
V.resize(N, 0);
} else if (O == Order::QuickSortAdversary) {
fillAdversarialQuickSortInput(V, N);
} else {
while (V.size() < N)
V.push_back(V.size());
@ -175,9 +128,6 @@ void sortValues(T& V, Order O) {
case Order::Heap:
std::make_heap(V.begin(), V.end());
break;
case Order::QuickSortAdversary:
// Nothing to do
break;
}
}
@ -384,4 +334,4 @@ int main(int argc, char** argv) {
makeCartesianProductBenchmark<PushHeap, AllValueTypes, AllOrders>(Quantities);
makeCartesianProductBenchmark<PopHeap, AllValueTypes>(Quantities);
benchmark::RunSpecifiedBenchmarks();
}
}

View File

@ -30,7 +30,7 @@ struct TestIntBase {
static std::vector<IntT> generateInput(size_t size) {
std::vector<IntT> Res(size);
std::generate(Res.begin(), Res.end(),
[] { return getRandomInteger<IntT>(0, std::numeric_limits<IntT>::max()); });
[] { return getRandomInteger<IntT>(); });
return Res;
}
};

View File

@ -97,6 +97,7 @@ static void BM_DeallocateOnly(benchmark::State& st) {
const size_t alloc_size = st.range(0);
const auto NumAllocs = st.max_iterations;
using PtrT = void*;
std::vector<void*> Pointers(NumAllocs);
for (auto& p : Pointers) {
p = AllocWrapper::Allocate(alloc_size);

View File

@ -1,3 +1,4 @@
// -*- C++ -*-
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.

View File

@ -83,7 +83,7 @@ void BM_PathIterateMultipleTimes(benchmark::State &st, GenInputs gen) {
PP /= Part;
benchmark::DoNotOptimize(PP.native().data());
while (st.KeepRunning()) {
for (auto const& E : PP) {
for (auto &E : PP) {
benchmark::DoNotOptimize(E.native().data());
}
benchmark::ClobberMemory();
@ -104,7 +104,7 @@ void BM_PathIterateOnce(benchmark::State &st, GenInputs gen) {
benchmark::DoNotOptimize(PP.native().data());
while (st.KeepRunning()) {
const path P = PP.native();
for (auto const& E : P) {
for (auto &E : P) {
benchmark::DoNotOptimize(E.native().data());
}
benchmark::ClobberMemory();

View File

@ -1,36 +0,0 @@
//===----------------------------------------------------------------------===//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include <format>
#include <string>
#include "benchmark/benchmark.h"
#include "make_string.h"
#define CSTR(S) MAKE_CSTRING(CharT, S)
template <class CharT>
static void BM_format_string(benchmark::State& state) {
size_t size = state.range(0);
std::basic_string<CharT> str(size, CharT('*'));
while (state.KeepRunningBatch(str.size()))
benchmark::DoNotOptimize(std::format(CSTR("{}"), str));
state.SetBytesProcessed(state.iterations() * size * sizeof(CharT));
}
BENCHMARK_TEMPLATE(BM_format_string, char)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_string, wchar_t)->RangeMultiplier(2)->Range(1, 1 << 20);
int main(int argc, char** argv) {
benchmark::Initialize(&argc, argv);
if (benchmark::ReportUnrecognizedArguments(argc, argv))
return 1;
benchmark::RunSpecifiedBenchmarks();
}

View File

@ -1,107 +0,0 @@
//===----------------------------------------------------------------------===//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include <format>
#include <iterator>
#include <algorithm>
#include <array>
#include <list>
#include <span>
#include <string>
#include <vector>
#include "benchmark/benchmark.h"
#include "make_string.h"
#define CSTR(S) MAKE_CSTRING(CharT, S)
/*** Back inserter ***/
template <class Container>
static void BM_format_to_string_back_inserter(benchmark::State& state) {
using CharT = typename Container::value_type;
size_t size = state.range(0);
auto str = std::basic_string<CharT>(size, CharT('*'));
for (auto _ : state) {
Container output;
benchmark::DoNotOptimize(std::format_to(std::back_inserter(output), CSTR("{}"), str));
}
state.SetBytesProcessed(state.iterations() * size * sizeof(CharT));
}
/*** Begin ***/
template <class Container>
static void BM_format_to_string_begin(benchmark::State& state) {
using CharT = typename Container::value_type;
size_t size = state.range(0);
auto str = std::basic_string<CharT>(size, CharT('*'));
Container output(size, CharT('-'));
for (auto _ : state)
benchmark::DoNotOptimize(std::format_to(std::begin(output), CSTR("{}"), str));
state.SetBytesProcessed(state.iterations() * size * sizeof(CharT));
}
/*** Pointer ***/
template <class CharT>
static void BM_format_to_string_span(benchmark::State& state) {
size_t size = state.range(0);
auto str = std::basic_string<CharT>(size, CharT('*'));
auto buffer = std::basic_string<CharT>(size, CharT('-'));
std::span<CharT> output{buffer};
for (auto _ : state)
benchmark::DoNotOptimize(std::format_to(std::begin(output), CSTR("{}"), str));
state.SetBytesProcessed(state.iterations() * size * sizeof(CharT));
}
template <class CharT>
static void BM_format_to_string_pointer(benchmark::State& state) {
size_t size = state.range(0);
auto str = std::basic_string<CharT>(size, CharT('*'));
auto buffer = std::basic_string<CharT>(size, CharT('-'));
CharT* output = buffer.data();
for (auto _ : state)
benchmark::DoNotOptimize(std::format_to(output, CSTR("{}"), str));
state.SetBytesProcessed(state.iterations() * size * sizeof(CharT));
}
/*** Main ***/
BENCHMARK_TEMPLATE(BM_format_to_string_back_inserter, std::string)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_back_inserter, std::vector<char>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_back_inserter, std::list<char>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_begin, std::string)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_begin, std::vector<char>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_begin, std::list<char>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_span, char)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_pointer, char)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_back_inserter, std::wstring)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_back_inserter, std::vector<wchar_t>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_back_inserter, std::list<wchar_t>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_begin, std::wstring)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_begin, std::vector<wchar_t>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_begin, std::list<wchar_t>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_span, wchar_t)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_string_pointer, wchar_t)->RangeMultiplier(2)->Range(1, 1 << 20);
int main(int argc, char** argv) {
benchmark::Initialize(&argc, argv);
if (benchmark::ReportUnrecognizedArguments(argc, argv))
return 1;
benchmark::RunSpecifiedBenchmarks();
}

View File

@ -1,107 +0,0 @@
//===----------------------------------------------------------------------===//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include <format>
#include <iterator>
#include <algorithm>
#include <array>
#include <list>
#include <span>
#include <string>
#include <vector>
#include "benchmark/benchmark.h"
#include "make_string.h"
#define CSTR(S) MAKE_CSTRING(CharT, S)
/*** Back inserter ***/
template <class Container>
static void BM_format_to_n_string_back_inserter(benchmark::State& state) {
using CharT = typename Container::value_type;
size_t size = state.range(0);
auto str = std::basic_string<CharT>(2 * size, CharT('*'));
for (auto _ : state) {
Container output;
benchmark::DoNotOptimize(std::format_to_n(std::back_inserter(output), size, CSTR("{}"), str));
}
state.SetBytesProcessed(state.iterations() * size * sizeof(CharT));
}
/*** Begin ***/
template <class Container>
static void BM_format_to_n_string_begin(benchmark::State& state) {
using CharT = typename Container::value_type;
size_t size = state.range(0);
auto str = std::basic_string<CharT>(2 * size, CharT('*'));
Container output(size, CharT('-'));
for (auto _ : state)
benchmark::DoNotOptimize(std::format_to_n(std::begin(output), size, CSTR("{}"), str));
state.SetBytesProcessed(state.iterations() * size * sizeof(CharT));
}
/*** Pointer ***/
template <class CharT>
static void BM_format_to_n_string_span(benchmark::State& state) {
size_t size = state.range(0);
auto str = std::basic_string<CharT>(2 * size, CharT('*'));
auto buffer = std::basic_string<CharT>(size, CharT('-'));
std::span<CharT> output{buffer};
for (auto _ : state)
benchmark::DoNotOptimize(std::format_to_n(std::begin(output), size, CSTR("{}"), str));
state.SetBytesProcessed(state.iterations() * size * sizeof(CharT));
}
template <class CharT>
static void BM_format_to_n_string_pointer(benchmark::State& state) {
size_t size = state.range(0);
auto str = std::basic_string<CharT>(2 * size, CharT('*'));
auto buffer = std::basic_string<CharT>(size, CharT('-'));
CharT* output = buffer.data();
for (auto _ : state)
benchmark::DoNotOptimize(std::format_to_n(output, size, CSTR("{}"), str));
state.SetBytesProcessed(state.iterations() * size * sizeof(CharT));
}
/*** Main ***/
BENCHMARK_TEMPLATE(BM_format_to_n_string_back_inserter, std::string)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_back_inserter, std::vector<char>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_back_inserter, std::list<char>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_begin, std::string)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_begin, std::vector<char>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_begin, std::list<char>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_span, char)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_pointer, char)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_back_inserter, std::wstring)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_back_inserter, std::vector<wchar_t>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_back_inserter, std::list<wchar_t>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_begin, std::wstring)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_begin, std::vector<wchar_t>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_begin, std::list<wchar_t>)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_span, wchar_t)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_format_to_n_string_pointer, wchar_t)->RangeMultiplier(2)->Range(1, 1 << 20);
int main(int argc, char** argv) {
benchmark::Initialize(&argc, argv);
if (benchmark::ReportUnrecognizedArguments(argc, argv))
return 1;
benchmark::RunSpecifiedBenchmarks();
}

View File

@ -1,36 +0,0 @@
//===----------------------------------------------------------------------===//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include <format>
#include <string>
#include "benchmark/benchmark.h"
#include "make_string.h"
#define CSTR(S) MAKE_CSTRING(CharT, S)
template <class CharT>
static void BM_formatted_size_string(benchmark::State& state) {
size_t size = state.range(0);
std::basic_string<CharT> str(size, CharT('*'));
while (state.KeepRunningBatch(str.size()))
benchmark::DoNotOptimize(std::formatted_size(CSTR("{}"), str));
state.SetBytesProcessed(state.iterations() * size * sizeof(CharT));
}
BENCHMARK_TEMPLATE(BM_formatted_size_string, char)->RangeMultiplier(2)->Range(1, 1 << 20);
BENCHMARK_TEMPLATE(BM_formatted_size_string, wchar_t)->RangeMultiplier(2)->Range(1, 1 << 20);
int main(int argc, char** argv) {
benchmark::Initialize(&argc, argv);
if (benchmark::ReportUnrecognizedArguments(argc, argv))
return 1;
benchmark::RunSpecifiedBenchmarks();
}

View File

@ -1,241 +0,0 @@
//===----------------------------------------------------------------------===//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include <format>
#include <array>
#include <limits>
#include <random>
#include <string>
#include "CartesianBenchmarks.h"
#include "benchmark/benchmark.h"
// *** Localization ***
enum class LocalizationE { False, True };
struct AllLocalizations : EnumValuesAsTuple<AllLocalizations, LocalizationE, 2> {
static constexpr const char* Names[] = {"LocFalse", "LocTrue"};
};
template <LocalizationE E>
struct Localization {};
template <>
struct Localization<LocalizationE::False> {
static constexpr const char* fmt = "";
};
template <>
struct Localization<LocalizationE::True> {
static constexpr const char* fmt = "L";
};
// *** Types ***
enum class TypeE { Float, Double, LongDouble };
// TODO FMT Set to 3 after to_chars has long double suport.
struct AllTypes : EnumValuesAsTuple<AllTypes, TypeE, 2> {
static constexpr const char* Names[] = {"Float", "Double", "LongDouble"};
};
template <TypeE E>
struct Type {};
template <>
struct Type<TypeE::Float> {
using type = float;
};
template <>
struct Type<TypeE::Double> {
using type = double;
};
template <>
struct Type<TypeE::LongDouble> {
using type = long double;
};
// *** Values ***
enum class ValueE { Inf, Random };
struct AllValues : EnumValuesAsTuple<AllValues, ValueE, 2> {
static constexpr const char* Names[] = {"Inf", "Random"};
};
template <ValueE E>
struct Value {};
template <>
struct Value<ValueE::Inf> {
template <class F>
static std::array<F, 1000> make_data() {
std::array<F, 1000> result;
std::fill(result.begin(), result.end(), -std::numeric_limits<F>::infinity());
return result;
}
};
template <>
struct Value<ValueE::Random> {
template <class F>
static std::array<F, 1000> make_data() {
std::random_device seed;
std::mt19937 generator(seed());
std::uniform_int_distribution<std::conditional_t<sizeof(F) == sizeof(uint32_t), uint32_t, uint64_t>> distribution;
std::array<F, 1000> result;
std::generate(result.begin(), result.end(), [&] {
while (true) {
auto result = std::bit_cast<F>(distribution(generator));
if (std::isfinite(result))
return result;
}
});
return result;
}
};
// *** Display Type ***
enum class DisplayTypeE {
Default,
Hex,
Scientific,
Fixed,
General,
};
struct AllDisplayTypes : EnumValuesAsTuple<AllDisplayTypes, DisplayTypeE, 5> {
static constexpr const char* Names[] = {"DisplayDefault", "DisplayHex", "DisplayScientific", "DisplayFixed",
"DisplayGeneral"};
};
template <DisplayTypeE E>
struct DisplayType {};
template <>
struct DisplayType<DisplayTypeE::Default> {
static constexpr const char* fmt = "";
};
template <>
struct DisplayType<DisplayTypeE::Hex> {
static constexpr const char* fmt = "a";
};
template <>
struct DisplayType<DisplayTypeE::Scientific> {
static constexpr const char* fmt = "e";
};
template <>
struct DisplayType<DisplayTypeE::Fixed> {
static constexpr const char* fmt = "f";
};
template <>
struct DisplayType<DisplayTypeE::General> {
static constexpr const char* fmt = "g";
};
// *** Alignment ***
enum class AlignmentE { None, Left, Center, Right, ZeroPadding };
struct AllAlignments : EnumValuesAsTuple<AllAlignments, AlignmentE, 5> {
static constexpr const char* Names[] = {"AlignNone", "AlignmentLeft", "AlignmentCenter", "AlignmentRight",
"ZeroPadding"};
};
template <AlignmentE E>
struct Alignment {};
template <>
struct Alignment<AlignmentE::None> {
static constexpr const char* fmt = "";
};
template <>
struct Alignment<AlignmentE::Left> {
// Width > PrecisionE::Huge
static constexpr const char* fmt = "0<17500";
};
template <>
struct Alignment<AlignmentE::Center> {
// Width > PrecisionE::Huge
static constexpr const char* fmt = "0^17500";
};
template <>
struct Alignment<AlignmentE::Right> {
// Width > PrecisionE::Huge
static constexpr const char* fmt = "0>17500";
};
template <>
struct Alignment<AlignmentE::ZeroPadding> {
// Width > PrecisionE::Huge
static constexpr const char* fmt = "017500";
};
enum class PrecisionE { None, Zero, Small, Huge };
struct AllPrecisions : EnumValuesAsTuple<AllPrecisions, PrecisionE, 4> {
static constexpr const char* Names[] = {"PrecNone", "PrecZero", "PrecSmall", "PrecHuge"};
};
template <PrecisionE E>
struct Precision {};
template <>
struct Precision<PrecisionE::None> {
static constexpr const char* fmt = "";
};
template <>
struct Precision<PrecisionE::Zero> {
static constexpr const char* fmt = ".0";
};
template <>
struct Precision<PrecisionE::Small> {
static constexpr const char* fmt = ".10";
};
template <>
struct Precision<PrecisionE::Huge> {
// The maximum precision for a minimal sub normal long double is ±0x1p-16494.
// This value is always larger than that value forcing the trailing zero path
// to be executed.
static constexpr const char* fmt = ".17000";
};
template <class L, class DT, class T, class V, class A, class P>
struct FloatingPoint {
using F = typename Type<T::value>::type;
void run(benchmark::State& state) const {
std::array<F, 1000> data{Value<V::value>::template make_data<F>()};
std::array<char, 20'000> output;
std::string fmt{std::string("{:") + Alignment<A::value>::fmt + Precision<P::value>::fmt +
Localization<L::value>::fmt + DisplayType<DT::value>::fmt + "}"};
while (state.KeepRunningBatch(1000))
for (F value : data)
benchmark::DoNotOptimize(std::format_to(output.begin(), fmt, value));
}
std::string name() const {
return "FloatingPoint" + L::name() + DT::name() + T::name() + V::name() + A::name() + P::name();
}
};
int main(int argc, char** argv) {
benchmark::Initialize(&argc, argv);
if (benchmark::ReportUnrecognizedArguments(argc, argv))
return 1;
makeCartesianProductBenchmark<FloatingPoint, AllLocalizations, AllDisplayTypes, AllTypes, AllValues, AllAlignments,
AllPrecisions>();
benchmark::RunSpecifiedBenchmarks();
}

View File

@ -1,196 +0,0 @@
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef _LIBCPP_HAS_NO_UNICODE
#include <array>
#include <format>
#include "benchmark/benchmark.h"
#include "test_macros.h"
template <class CharT, size_t N>
class tester {
static constexpr size_t size_ = N - 1;
std::array<CharT, 100 * size_> data_;
public:
explicit constexpr tester(const CharT (&input)[N]) {
auto it = data_.begin();
for (int i = 0; i < 100; ++i)
it = std::copy_n(input, size_, it);
}
constexpr size_t size() const noexcept { return data_.size(); }
constexpr const CharT* begin() const noexcept { return data_.begin(); }
constexpr const CharT* end() const noexcept { return data_.end(); }
void test(benchmark::State& state) const {
for (auto _ : state)
benchmark::DoNotOptimize(std::__format_spec::__get_string_alignment(
begin(), end(), 1'000'000, 1'000'000));
state.SetItemsProcessed(state.iterations() * size());
}
};
#define TEST(u8) \
if constexpr (std::same_as<CharT, char>) { \
constexpr auto p = tester{u8}; \
p.test(state); \
} else if constexpr (std::same_as<CharT, char16_t>) { \
constexpr auto p = tester{TEST_CONCAT(u, u8)}; \
p.test(state); \
} else { \
constexpr auto p = tester{TEST_CONCAT(U, u8)}; \
p.test(state); \
}
template <class CharT>
static void BM_EstimateLengthNoMultiByte(benchmark::State& state) {
TEST("The quick brown fox jumps over the lazy dog");
}
template <class CharT>
static void BM_EstimateLengthTwoByteDE(benchmark::State& state) {
static_assert(sizeof("Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich") == 67);
// https://en.wikipedia.org/wiki/Pangram
TEST("Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich");
}
template <class CharT>
static void BM_EstimateLengthTwoBytePL(benchmark::State& state) {
static_assert(sizeof("Stróż pchnął kość w quiz gędźb vel fax myjń") == 53);
// https://en.wikipedia.org/wiki/Pangram
TEST("Stróż pchnął kość w quiz gędźb vel fax myjń");
}
// All values below are 1100, which is is the first multi column sequence.
template <class CharT>
static void BM_EstimateLengthThreeByteSingleColumnLow(benchmark::State& state) {
static_assert(sizeof("\u0800\u0801\u0802\u0803\u0804\u0805\u0806\u0807"
"\u0808\u0809\u080a\u080b\u080c\u080d\u080e\u080f") ==
49);
TEST("\u0800\u0801\u0802\u0803\u0804\u0805\u0806\u0807"
"\u0808\u0809\u080a\u080b\u080c\u080d\u080e\u080f");
}
template <class CharT>
static void
BM_EstimateLengthThreeByteSingleColumnHigh(benchmark::State& state) {
static_assert(sizeof("\u1800\u1801\u1802\u1803\u1804\u1805\u1806\u1807"
"\u1808\u1809\u180a\u180b\u180c\u180d\u180e\u180f") ==
49);
TEST("\u1800\u1801\u1802\u1803\u1804\u1805\u1806\u1807"
"\u1808\u1809\u180a\u180b\u180c\u180d\u180e\u180f");
}
template <class CharT>
static void BM_EstimateLengthThreeByteDoubleColumn(benchmark::State& state) {
static_assert(sizeof("\u1100\u0801\u0802\u0803\u0804\u0805\u0806\u0807"
"\u1108\u0809\u080a\u080b\u080c\u080d\u080e\u080f") ==
49);
TEST("\u1100\u0801\u0802\u0803\u0804\u0805\u0806\u0807"
"\u1108\u0809\u080a\u080b\u080c\u080d\u080e\u080f");
}
template <class CharT>
static void BM_EstimateLengthThreeByte(benchmark::State& state) {
static_assert(sizeof("\u1400\u1501\ubbbb\uff00\u0800\u4099\uabcd\u4000"
"\u8ead\ubeef\u1111\u4987\u4321\uffff\u357a\ud50e") ==
49);
TEST("\u1400\u1501\ubbbb\uff00\u0800\u4099\uabcd\u4000"
"\u8ead\ubeef\u1111\u4987\u4321\uffff\u357a\ud50e");
}
template <class CharT>
static void BM_EstimateLengthFourByteSingleColumn(benchmark::State& state) {
static_assert(sizeof("\U00010000\U00010001\U00010002\U00010003"
"\U00010004\U00010005\U00010006\U00010007"
"\U00010008\U00010009\U0001000a\U0001000b"
"\U0001000c\U0001000d\U0001000e\U0001000f") == 65);
TEST("\U00010000\U00010001\U00010002\U00010003"
"\U00010004\U00010005\U00010006\U00010007"
"\U00010008\U00010009\U0001000a\U0001000b"
"\U0001000c\U0001000d\U0001000e\U0001000f");
}
template <class CharT>
static void BM_EstimateLengthFourByteDoubleColumn(benchmark::State& state) {
static_assert(sizeof("\U00020000\U00020002\U00020002\U00020003"
"\U00020004\U00020005\U00020006\U00020007"
"\U00020008\U00020009\U0002000a\U0002000b"
"\U0002000c\U0002000d\U0002000e\U0002000f") == 65);
TEST("\U00020000\U00020002\U00020002\U00020003"
"\U00020004\U00020005\U00020006\U00020007"
"\U00020008\U00020009\U0002000a\U0002000b"
"\U0002000c\U0002000d\U0002000e\U0002000f");
}
template <class CharT>
static void BM_EstimateLengthFourByte(benchmark::State& state) {
static_assert(sizeof("\U00010000\U00010001\U00010002\U00010003"
"\U00020004\U00020005\U00020006\U00020007"
"\U00010008\U00010009\U0001000a\U0001000b"
"\U0002000c\U0002000d\U0002000e\U0002000f") == 65);
TEST("\U00010000\U00010001\U00010002\U00010003"
"\U00020004\U00020005\U00020006\U00020007"
"\U00010008\U00010009\U0001000a\U0001000b"
"\U0002000c\U0002000d\U0002000e\U0002000f");
}
BENCHMARK_TEMPLATE(BM_EstimateLengthNoMultiByte, char);
BENCHMARK_TEMPLATE(BM_EstimateLengthTwoByteDE, char);
BENCHMARK_TEMPLATE(BM_EstimateLengthTwoBytePL, char);
BENCHMARK_TEMPLATE(BM_EstimateLengthThreeByteSingleColumnLow, char);
BENCHMARK_TEMPLATE(BM_EstimateLengthThreeByteSingleColumnHigh, char);
BENCHMARK_TEMPLATE(BM_EstimateLengthThreeByteDoubleColumn, char);
BENCHMARK_TEMPLATE(BM_EstimateLengthThreeByte, char);
BENCHMARK_TEMPLATE(BM_EstimateLengthFourByteSingleColumn, char);
BENCHMARK_TEMPLATE(BM_EstimateLengthFourByteDoubleColumn, char);
BENCHMARK_TEMPLATE(BM_EstimateLengthFourByte, char);
BENCHMARK_TEMPLATE(BM_EstimateLengthNoMultiByte, char16_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthTwoByteDE, char16_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthTwoBytePL, char16_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthThreeByteSingleColumnLow, char16_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthThreeByteSingleColumnHigh, char16_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthThreeByteDoubleColumn, char16_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthThreeByte, char16_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthFourByteSingleColumn, char16_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthFourByteDoubleColumn, char16_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthFourByte, char16_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthNoMultiByte, char32_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthTwoByteDE, char32_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthTwoBytePL, char32_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthThreeByteSingleColumnLow, char32_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthThreeByteSingleColumnHigh, char32_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthThreeByteDoubleColumn, char32_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthThreeByte, char32_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthFourByteSingleColumn, char32_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthFourByteDoubleColumn, char32_t);
BENCHMARK_TEMPLATE(BM_EstimateLengthFourByte, char32_t);
int main(int argc, char** argv) {
benchmark::Initialize(&argc, argv);
if (benchmark::ReportUnrecognizedArguments(argc, argv))
return 1;
benchmark::RunSpecifiedBenchmarks();
}
#else
int main(int, char**) { return 0; }
#endif

View File

@ -31,7 +31,7 @@ function(define_linker_script target)
set(link_libraries)
if (interface_libs)
foreach(lib IN LISTS interface_libs)
if ("${lib}" MATCHES "cxx-headers|ParallelSTL")
if ("${lib}" STREQUAL "cxx-headers")
continue()
endif()
# If ${lib} is not a target, we use a dummy target which we know will

View File

@ -0,0 +1,64 @@
function(find_compiler_rt_library name dest)
if (NOT DEFINED LIBCXX_COMPILE_FLAGS)
message(FATAL_ERROR "LIBCXX_COMPILE_FLAGS must be defined when using this function")
endif()
set(dest "" PARENT_SCOPE)
set(CLANG_COMMAND ${CMAKE_CXX_COMPILER} ${LIBCXX_COMPILE_FLAGS}
"--rtlib=compiler-rt" "--print-libgcc-file-name")
if (CMAKE_CXX_COMPILER_ID MATCHES Clang AND CMAKE_CXX_COMPILER_TARGET)
list(APPEND CLANG_COMMAND "--target=${CMAKE_CXX_COMPILER_TARGET}")
endif()
get_property(LIBCXX_CXX_FLAGS CACHE CMAKE_CXX_FLAGS PROPERTY VALUE)
string(REPLACE " " ";" LIBCXX_CXX_FLAGS "${LIBCXX_CXX_FLAGS}")
list(APPEND CLANG_COMMAND ${LIBCXX_CXX_FLAGS})
execute_process(
COMMAND ${CLANG_COMMAND}
RESULT_VARIABLE HAD_ERROR
OUTPUT_VARIABLE LIBRARY_FILE
)
string(STRIP "${LIBRARY_FILE}" LIBRARY_FILE)
file(TO_CMAKE_PATH "${LIBRARY_FILE}" LIBRARY_FILE)
string(REPLACE "builtins" "${name}" LIBRARY_FILE "${LIBRARY_FILE}")
if (NOT HAD_ERROR AND EXISTS "${LIBRARY_FILE}")
message(STATUS "Found compiler-rt library: ${LIBRARY_FILE}")
set(${dest} "${LIBRARY_FILE}" PARENT_SCOPE)
else()
message(STATUS "Failed to find compiler-rt library")
endif()
endfunction()
function(find_compiler_rt_dir dest)
if (NOT DEFINED LIBCXX_COMPILE_FLAGS)
message(FATAL_ERROR "LIBCXX_COMPILE_FLAGS must be defined when using this function")
endif()
set(dest "" PARENT_SCOPE)
if (APPLE)
set(CLANG_COMMAND ${CMAKE_CXX_COMPILER} ${LIBCXX_COMPILE_FLAGS}
"-print-file-name=lib")
execute_process(
COMMAND ${CLANG_COMMAND}
RESULT_VARIABLE HAD_ERROR
OUTPUT_VARIABLE LIBRARY_DIR
)
string(STRIP "${LIBRARY_DIR}" LIBRARY_DIR)
file(TO_CMAKE_PATH "${LIBRARY_DIR}" LIBRARY_DIR)
set(LIBRARY_DIR "${LIBRARY_DIR}/darwin")
else()
set(CLANG_COMMAND ${CMAKE_CXX_COMPILER} ${LIBCXX_COMPILE_FLAGS}
"--rtlib=compiler-rt" "--print-libgcc-file-name")
execute_process(
COMMAND ${CLANG_COMMAND}
RESULT_VARIABLE HAD_ERROR
OUTPUT_VARIABLE LIBRARY_FILE
)
string(STRIP "${LIBRARY_FILE}" LIBRARY_FILE)
file(TO_CMAKE_PATH "${LIBRARY_FILE}" LIBRARY_FILE)
get_filename_component(LIBRARY_DIR "${LIBRARY_FILE}" DIRECTORY)
endif()
if (NOT HAD_ERROR AND EXISTS "${LIBRARY_DIR}")
message(STATUS "Found compiler-rt directory: ${LIBRARY_DIR}")
set(${dest} "${LIBRARY_DIR}" PARENT_SCOPE)
else()
message(STATUS "Failed to find compiler-rt directory")
endif()
endfunction()

View File

@ -1,9 +1,8 @@
#===============================================================================
# Add an ABI library if appropriate
#===============================================================================
include(GNUInstallDirs)
#
# _setup_abi: Set up the build to use an ABI library
#
@ -64,7 +63,7 @@ macro(setup_abi_lib abidefines abishared abistatic abifiles abidirs)
if (LIBCXX_INSTALL_HEADERS)
install(FILES "${LIBCXX_BINARY_INCLUDE_DIR}/${fpath}"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/c++/v1/${dstdir}"
DESTINATION include/c++/v1/${dstdir}
COMPONENT cxx-headers
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)
@ -118,10 +117,6 @@ elseif ("${LIBCXX_CXX_ABI_LIBNAME}" STREQUAL "libcxxabi")
setup_abi_lib(
"-DLIBCXX_BUILDING_LIBCXXABI"
"${shared}" "${static}" "cxxabi.h;__cxxabi_config.h" "")
elseif ("${LIBCXX_CXX_ABI_LIBNAME}" STREQUAL "system-libcxxabi")
setup_abi_lib(
"-DLIBCXX_BUILDING_LIBCXXABI"
"c++abi" "c++abi" "cxxabi.h;__cxxabi_config.h" "")
elseif ("${LIBCXX_CXX_ABI_LIBNAME}" STREQUAL "libcxxrt")
if(NOT LIBCXX_CXX_ABI_INCLUDE_PATHS)
set(LIBCXX_CXX_ABI_INCLUDE_PATHS "/usr/include/c++/v1")

View File

@ -0,0 +1,78 @@
if (NOT DEFINED LLVM_PATH)
set(LLVM_PATH ${CMAKE_CURRENT_LIST_DIR}/../../../llvm CACHE PATH "" FORCE)
endif()
if(NOT IS_DIRECTORY ${LLVM_PATH})
message(FATAL_ERROR
"The provided LLVM_PATH (${LLVM_PATH}) is not a valid directory. Note that "
"building libc++ outside of the monorepo is not supported anymore. Please "
"use a Standalone build against the monorepo, a Runtimes build or a classic "
"monorepo build.")
endif()
set(LLVM_INCLUDE_DIR ${LLVM_PATH}/include CACHE PATH "Path to llvm/include")
set(LLVM_PATH ${LLVM_PATH} CACHE PATH "Path to LLVM source tree")
set(LLVM_MAIN_SRC_DIR ${LLVM_PATH})
set(LLVM_CMAKE_PATH "${LLVM_PATH}/cmake/modules")
if (EXISTS "${LLVM_CMAKE_PATH}")
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_PATH}")
elseif (EXISTS "${LLVM_MAIN_SRC_DIR}/cmake/modules")
list(APPEND CMAKE_MODULE_PATH "${LLVM_MAIN_SRC_DIR}/cmake/modules")
else()
message(FATAL_ERROR "Neither ${LLVM_CMAKE_PATH} nor ${LLVM_MAIN_SRC_DIR}/cmake/modules found. "
"This is not a supported configuration.")
endif()
message(STATUS "Configuring for standalone build.")
# By default, we target the host, but this can be overridden at CMake invocation time.
include(GetHostTriple)
get_host_triple(LLVM_INFERRED_HOST_TRIPLE)
set(LLVM_HOST_TRIPLE "${LLVM_INFERRED_HOST_TRIPLE}" CACHE STRING "Host on which LLVM binaries will run")
set(LLVM_DEFAULT_TARGET_TRIPLE "${LLVM_HOST_TRIPLE}" CACHE STRING "Target triple used by default.")
# Add LLVM Functions --------------------------------------------------------
if (WIN32)
set(LLVM_ON_UNIX 0)
set(LLVM_ON_WIN32 1)
else()
set(LLVM_ON_UNIX 1)
set(LLVM_ON_WIN32 0)
endif()
include(AddLLVM OPTIONAL)
# LLVM Options --------------------------------------------------------------
if (NOT DEFINED LLVM_INCLUDE_TESTS)
set(LLVM_INCLUDE_TESTS ON)
endif()
if (NOT DEFINED LLVM_INCLUDE_DOCS)
set(LLVM_INCLUDE_DOCS ON)
endif()
if (NOT DEFINED LLVM_ENABLE_SPHINX)
set(LLVM_ENABLE_SPHINX OFF)
endif()
if (LLVM_INCLUDE_TESTS)
# Required LIT Configuration ------------------------------------------------
# Define the default arguments to use with 'lit', and an option for the user
# to override.
set(LLVM_DEFAULT_EXTERNAL_LIT "${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py")
set(LIT_ARGS_DEFAULT "-sv --show-xfail --show-unsupported")
if (MSVC OR XCODE)
set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
endif()
set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit")
endif()
# Required doc configuration
if (LLVM_ENABLE_SPHINX)
find_package(Sphinx REQUIRED)
endif()
if (LLVM_ON_UNIX AND NOT APPLE)
set(LLVM_HAVE_LINK_VERSION_SCRIPT 1)
else()
set(LLVM_HAVE_LINK_VERSION_SCRIPT 0)
endif()

View File

@ -1,16 +0,0 @@
set(CMAKE_BUILD_TYPE Release CACHE STRING "")
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE BOOL "")
set(CMAKE_C_FLAGS "-D__LIBC_NO_CPP_MATH_OVERLOADS__" CACHE STRING "")
set(CMAKE_CXX_FLAGS "-D__LIBC_NO_CPP_MATH_OVERLOADS__" CACHE STRING "")
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-G -Wl,-bcdtors:all:-2147483548:s" CACHE STRING "")
set(LIBCXX_USE_COMPILER_RT ON CACHE BOOL "")
set(LIBCXX_ENABLE_ASSERTIONS OFF CACHE BOOL "")
set(LIBCXX_ABI_VERSION "1" CACHE STRING "")
set(LIBCXX_ENABLE_ABI_LINKER_SCRIPT OFF CACHE BOOL "")
set(LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY OFF CACHE BOOL "")
set(LIBCXX_ENABLE_SHARED ON CACHE BOOL "")
set(LIBCXX_ENABLE_STATIC OFF CACHE BOOL "")
set(LIBCXXABI_ENABLE_SHARED ON CACHE BOOL "")
set(LIBCXXABI_ENABLE_STATIC OFF CACHE BOOL "")
set(LIBCXX_CXX_ABI libcxxabi CACHE STRING "")

View File

@ -18,6 +18,3 @@ set(LIBCXXABI_HERMETIC_STATIC_LIBRARY ON CACHE BOOL "")
set(LIBCXXABI_ENABLE_ASSERTIONS OFF CACHE BOOL "")
set(LIBCXXABI_ENABLE_FORGIVING_DYNAMIC_CAST ON CACHE BOOL "")
set(LIBCXX_TEST_PARAMS "stdlib=apple-libc++" CACHE STRING "")
set(LIBCXXABI_TEST_PARAMS "${LIBCXX_TEST_PARAMS}" CACHE STRING "")

View File

@ -1,4 +1,4 @@
set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "")
set(LIBCXX_TARGET_TRIPLE "armv7l-linux-gnueabihf" CACHE STRING "")
set(LIBCXX_TARGET_TRIPLE "armv7-linux-gnueabihf" CACHE STRING "")
set(CMAKE_CXX_FLAGS "-marm" CACHE STRING "")
set(CMAKE_C_FLAGS "-marm" CACHE STRING "")

View File

@ -1,5 +1,5 @@
set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "")
set(LIBCXX_TARGET_TRIPLE "armv7l-linux-gnueabihf" CACHE STRING "")
set(LIBCXX_TARGET_TRIPLE "armv7-linux-gnueabihf" CACHE STRING "")
set(CMAKE_CXX_FLAGS "-mthumb" CACHE STRING "")
set(CMAKE_C_FLAGS "-mthumb" CACHE STRING "")
set(LIBCXX_ENABLE_EXCEPTIONS OFF CACHE BOOL "")

View File

@ -1,4 +1,4 @@
set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "")
set(LIBCXX_TARGET_TRIPLE "armv8l-linux-gnueabihf" CACHE STRING "")
set(LIBCXX_TARGET_TRIPLE "armv8-linux-gnueabihf" CACHE STRING "")
set(CMAKE_CXX_FLAGS "-marm" CACHE STRING "")
set(CMAKE_C_FLAGS "-marm" CACHE STRING "")

View File

@ -1,5 +1,5 @@
set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "")
set(LIBCXX_TARGET_TRIPLE "armv8l-linux-gnueabihf" CACHE STRING "")
set(LIBCXX_TARGET_TRIPLE "armv8-linux-gnueabihf" CACHE STRING "")
set(CMAKE_CXX_FLAGS "-mthumb" CACHE STRING "")
set(CMAKE_C_FLAGS "-mthumb" CACHE STRING "")
set(LIBCXX_ENABLE_EXCEPTIONS OFF CACHE BOOL "")

View File

@ -0,0 +1 @@
set(LLVM_BUILD_32_BITS ON CACHE BOOL "")

View File

@ -1,3 +1 @@
set(LLVM_USE_SANITIZER "Address" CACHE STRING "")
# This is a temporary (hopefully) workaround for an ASan issue (see https://llvm.org/D119410).
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mllvm -asan-use-private-alias=1" CACHE INTERNAL "")

View File

@ -1,2 +1,2 @@
set(LIBCXX_TEST_PARAMS "debug_level=1" CACHE STRING "")
set(LIBCXX_TEST_PARAMS "debug_level=1" "additional_features=LIBCXX-DEBUG-FIXME" CACHE STRING "")
set(LIBCXXABI_TEST_PARAMS "${LIBCXX_TEST_PARAMS}" CACHE STRING "")

View File

@ -1,2 +0,0 @@
set(LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY OFF CACHE BOOL "")
set(LIBCXX_ENABLE_INCOMPLETE_FEATURES OFF CACHE BOOL "")

View File

@ -1 +0,0 @@
set(LIBCXX_ENABLE_UNICODE OFF CACHE BOOL "")

View File

@ -1 +0,0 @@
set(LIBCXX_ENABLE_WIDE_CHARACTERS OFF CACHE BOOL "")

View File

@ -1,18 +0,0 @@
set(LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY OFF CACHE BOOL "")
set(LIBCXX_HAS_WIN32_THREAD_API ON CACHE BOOL "")
set(LIBCXX_CXX_ABI libcxxabi CACHE STRING "")
set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "")
set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "")
set(LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "")
set(LIBCXX_USE_COMPILER_RT ON CACHE BOOL "")
set(LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "")
set(LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "")
set(LIBCXX_TARGET_INFO "libcxx.test.target_info.MingwLocalTI" CACHE STRING "")
# Without this flag, 'long double' (which is 80 bit on x86 mingw, but
# 64 bit in MSVC) isn't handled correctly in printf.
set(LIBCXX_EXTRA_SITE_DEFINES "__USE_MINGW_ANSI_STDIO=1" CACHE STRING "")

View File

@ -1,22 +1,9 @@
include(CMakePushCheckState)
include(CheckLibraryExists)
include(LLVMCheckCompilerLinkerFlag)
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
include(CheckCSourceCompiles)
# The compiler driver may be implicitly trying to link against libunwind.
# This is normally ok (libcxx relies on an unwinder), but if libunwind is
# built in the same cmake invocation as libcxx and we've got
# LIBCXXABI_USE_LLVM_UNWINDER set, we'd be linking against the just-built
# libunwind (and the compiler implicit -lunwind wouldn't succeed as the newly
# built libunwind isn't installed yet). For those cases, it'd be good to
# link with --uwnindlib=none. Check if that option works.
llvm_check_compiler_linker_flag(C "--unwindlib=none" LIBCXX_SUPPORTS_UNWINDLIB_NONE_FLAG)
if (LIBCXX_SUPPORTS_UNWINDLIB_NONE_FLAG)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} --unwindlib=none")
endif()
if(WIN32 AND NOT MINGW)
# NOTE(compnerd) this is technically a lie, there is msvcrt, but for now, lets
# let the default linking take care of that.
@ -61,9 +48,8 @@ if (LIBCXX_SUPPORTS_NOSTDLIBXX_FLAG OR LIBCXX_SUPPORTS_NODEFAULTLIBS_FLAG)
list(APPEND CMAKE_REQUIRED_LIBRARIES c)
endif ()
if (LIBCXX_USE_COMPILER_RT)
include(HandleCompilerRT)
find_compiler_rt_library(builtins LIBCXX_BUILTINS_LIBRARY
FLAGS ${LIBCXX_COMPILE_FLAGS})
list(APPEND CMAKE_REQUIRED_FLAGS -rtlib=compiler-rt)
find_compiler_rt_library(builtins LIBCXX_BUILTINS_LIBRARY)
list(APPEND CMAKE_REQUIRED_LIBRARIES "${LIBCXX_BUILTINS_LIBRARY}")
elseif (LIBCXX_HAS_GCC_LIB)
list(APPEND CMAKE_REQUIRED_LIBRARIES gcc)
@ -87,7 +73,7 @@ if (LIBCXX_SUPPORTS_NOSTDLIBXX_FLAG OR LIBCXX_SUPPORTS_NODEFAULTLIBS_FLAG)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fno-sanitize=all")
endif ()
if (CMAKE_C_FLAGS MATCHES -fsanitize-coverage OR CMAKE_CXX_FLAGS MATCHES -fsanitize-coverage)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fsanitize-coverage=0")
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fno-sanitize-coverage=edge,trace-cmp,indirect-calls,8bit-counters")
endif ()
endif ()

View File

@ -34,7 +34,9 @@ An example of a job definition is:
queue: "libcxx-builders"
os: "linux"
retry:
[...]
automatic:
- exit_status: -1 # Agent was lost
limit: 2
If you create your own agents, put them in the ``libcxx-builders`` queue and
use agent tags to allow targetting your agents from the Buildkite pipeline

View File

@ -25,58 +25,50 @@ libc++ :ref:`here <using-libcxx>`.
The default build
=================
The default way of building libc++, libc++abi and libunwind is to root the CMake
invocation at ``<monorepo>/runtimes``. While those projects are under the LLVM
umbrella, they are different in nature from other build tools, so it makes sense
to treat them as a separate set of entities. The default build can be achieved
with the following CMake invocation:
By default, libc++ and libc++abi are built as sub-projects of the LLVM project.
This can be achieved with the usual CMake invocation:
.. code-block:: bash
$ git clone https://github.com/llvm/llvm-project.git
$ cd llvm-project
$ mkdir build
$ cmake -G Ninja -S runtimes -B build -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" # Configure
$ ninja -C build cxx cxxabi unwind # Build
$ ninja -C build check-cxx check-cxxabi check-unwind # Test
$ ninja -C build install-cxx install-cxxabi install-unwind # Install
$ cmake -G Ninja -S llvm -B build -DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi" # Configure
$ ninja -C build cxx cxxabi # Build
$ ninja -C build check-cxx check-cxxabi # Test
$ ninja -C build install-cxx install-cxxabi # Install
.. note::
See :ref:`CMake Options` below for more configuration options.
After building the various ``install-XXX`` targets, shared libraries for libc++, libc++abi and
libunwind should now be present in ``<CMAKE_INSTALL_PREFIX>/lib``, and headers in
``<CMAKE_INSTALL_PREFIX>/include/c++/v1``. See :ref:`using an alternate libc++ installation
<alternate libcxx>` for information on how to use this libc++ over the default one.
After building the ``install-cxx`` and ``install-cxxabi`` targets, shared libraries
for libc++ and libc++abi should now be present in ``<CMAKE_INSTALL_PREFIX>/lib``, and
headers in ``<CMAKE_INSTALL_PREFIX>/include/c++/v1``. See :ref:`using an alternate
libc++ installation <alternate libcxx>` for information on how to use this libc++ over
the default one.
In the default configuration, the runtimes will be built using the compiler available by default
on your system. Of course, you can change what compiler is being used with the usual CMake
variables. If you wish to build the runtimes from a just-built Clang, the bootstrapping build
explained below makes this task easy.
In the default configuration, libc++ and libc++abi will be built using the compiler available
by default on your system. It is also possible to bootstrap Clang and build libc++ with it.
Bootstrapping build
===================
It is possible to build Clang and then build the runtimes using that just-built compiler in a
single CMake invocation. This is usually the correct way to build the runtimes when putting together
a toolchain, or when the system compiler is not adequate to build them (too old, unsupported, etc.).
To do this, use the following CMake invocation, and in particular notice how we're now rooting the
CMake invocation at ``<monorepo>/llvm``:
It is also possible to build Clang and then build libc++ and libc++abi using that
just-built compiler. This is the correct way to build libc++ when putting together
a toolchain, or when the system compiler is not adequate to build libc++ (too old,
unsupported, etc.). This type of build is also commonly called a "Runtimes build":
.. code-block:: bash
$ mkdir build
$ cmake -G Ninja -S llvm -B build -DLLVM_ENABLE_PROJECTS="clang" \ # Configure
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
$ cmake -G Ninja -S llvm -B build -DLLVM_ENABLE_PROJECTS="clang" \ # Configure
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
-DLLVM_RUNTIME_TARGETS="<target-triple>"
$ ninja -C build runtimes # Build
$ ninja -C build check-runtimes # Test
$ ninja -C build install-runtimes # Install
$ ninja -C build runtimes # Build
$ ninja -C build check-runtimes # Test
$ ninja -C build install-runtimes # Install
.. note::
This type of build is also commonly called a "Runtimes build", but we would like to move
away from that terminology, which is too confusing.
Support for Windows
===================
@ -218,6 +210,12 @@ libc++ specific options
Build libc++ with assertions enabled.
.. option:: LIBCXX_BUILD_32_BITS:BOOL
**Default**: ``OFF``
Build libc++ as a 32 bit library. Also see `LLVM_BUILD_32_BITS`.
.. option:: LIBCXX_ENABLE_SHARED:BOOL
**Default**: ``ON``
@ -253,15 +251,6 @@ libc++ specific options
This option can be used to enable or disable the filesystem components on
platforms that may not support them. For example on Windows when using MSVC.
.. option:: LIBCXX_ENABLE_WIDE_CHARACTERS:BOOL
**Default**: ``ON``
This option can be used to disable support for ``wchar_t`` in the library. It also
allows the library to work on top of a C Standard Library that does not provide
support for ``wchar_t``. This is especially useful in embedded settings where
C Standard Libraries don't always provide all the usual bells and whistles.
.. option:: LIBCXX_ENABLE_INCOMPLETE_FEATURES:BOOL
**Default**: ``ON``
@ -318,7 +307,7 @@ ABI Library Specific Options
.. option:: LIBCXX_CXX_ABI:STRING
**Values**: ``none``, ``libcxxabi``, ``system-libcxxabi``, ``libcxxrt``, ``libstdc++``, ``libsupc++``.
**Values**: ``none``, ``libcxxabi``, ``libcxxrt``, ``libstdc++``, ``libsupc++``.
Select the ABI library to build libc++ against.
@ -523,8 +512,8 @@ We can now run CMake:
.. code-block:: bash
$ cmake -G Ninja -S runtimes -B build \
-DLLVM_ENABLE_RUNTIMES="libcxx" \
$ cmake -G Ninja -S llvm -B build \
-DLLVM_ENABLE_PROJECTS="libcxx" \
-DLIBCXX_CXX_ABI=libstdc++ \
-DLIBCXX_CXX_ABI_INCLUDE_PATHS="/usr/include/c++/4.7/;/usr/include/c++/4.7/x86_64-linux-gnu/"
$ ninja -C build install-cxx
@ -549,8 +538,8 @@ We can now run CMake like:
.. code-block:: bash
$ cmake -G Ninja -S runtimes -B build \
-DLLVM_ENABLE_RUNTIMES="libcxx" \
$ cmake -G Ninja -S llvm -B build \
-DLLVM_ENABLE_PROJECTS="libcxx" \
-DLIBCXX_CXX_ABI=libcxxrt \
-DLIBCXX_CXX_ABI_INCLUDE_PATHS=path/to/libcxxrt-sources/src
$ ninja -C build install-cxx

View File

@ -12,9 +12,6 @@ For libc++, please make sure you follow `these instructions <https://www.llvm.or
for submitting a code review from the command-line using ``arc``, since we have some
automation (e.g. CI) that depends on the review being submitted that way.
If you plan on contributing to libc++, it can be useful to join the ``#libcxx`` channel
on `LLVM's Discord server <https://discord.gg/jzUbyP26tQ>`__.
Looking for pre-existing reviews
================================
@ -45,22 +42,6 @@ sure you don't forget anything:
- Did you add the relevant feature test macro(s) for your feature? Did you update the ``generate_feature_test_macro_components.py`` script with it?
- Did you run the ``libcxx-generate-files`` target and verify its output?
The review process
==================
After uploading your patch, you should see that the "libc++" review group is automatically
added as a reviewer for your patch. Once the group is marked as having approved your patch,
you can commit it. However, if you get an approval very quickly for a significant patch,
please try to wait a couple of business days before committing to give the opportunity for
other reviewers to chime in. If you need someone else to commit the patch for you, please
mention it and provide your ``Name <email@domain>`` for us to attribute the commit properly.
Note that the rule for accepting as the "libc++" review group is to wait for two members
of the group to have approved the patch, excluding the patch author. This is not a hard
rule -- for very simple patches, use your judgement. The `"libc++" review group <https://reviews.llvm.org/project/members/64/>`__
consists of frequent libc++ contributors with a good understanding of the project's
guidelines -- if you would like to be added to it, please reach out on Discord.
Post-release check list
=======================
@ -85,97 +66,3 @@ abilist for the platform, e.g.:
* C++20 for the Linux platform.
* MacOS C++20 for the Apple platform.
Working on large features
=========================
Libc++ makes no guarantees about the implementation status or the ABI stability
of features that have not yet been ratified in the C++ Standard. After the C++
Standard is ratified libc++ promises a conforming and ABI-stable
implementation. When working on a large new feature in the ratified version of
the C++ Standard that can't be finished before the next release branch is
created, we can't honor this promise. Another reason for not being able to
promise ABI stability happens when the C++ Standard committee retroactively
accepts ABI breaking papers as defect reports against the ratified C++
Standard.
When working on these features it should be possible for libc++ vendors to
disable these incomplete features, so they can promise ABI stability to their
customers. This is done by the CMake option
``LIBCXX_ENABLE_INCOMPLETE_FEATURES``. When start working on a large feature
the following steps are required to guard the new library with the CMake
option.
* ``libcxx/CMakeLists.txt``: Add
.. code-block:: cmake
config_define_if_not(LIBCXX_ENABLE_INCOMPLETE_FEATURES _LIBCPP_HAS_NO_INCOMPLETE_FOO)
* ``libcxx/include/__config_site.in``: Add
.. code-block:: c++
#cmakedefine _LIBCPP_HAS_NO_INCOMPLETE_FOO
* ``libcxx/include/foo``: The contents of the file should be guarded in an
``ifdef`` and always include ``<version>``
.. code-block:: c++
#ifndef _LIBCPP_FOO
#define _LIBCPP_FOO
// Make sure all feature-test macros are available.
#include <version>
// Enable the contents of the header only when libc++ was built with LIBCXX_ENABLE_INCOMPLETE_FEATURES.
#if !defined(_LIBCPP_HAS_NO_INCOMPLETE_FOO)
...
#endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_FO0)
#endif // _LIBCPP_FOO
* ``libcxx/src/CMakeLists.txt``: When the library has a file ``foo.cpp`` it
should only be added when ``LIBCXX_ENABLE_INCOMPLETE_FEATURES`` is enabled
.. code-block:: cmake
if(LIBCXX_ENABLE_INCOMPLETE_FEATURES)
list(APPEND LIBCXX_SOURCES
foo.cpp
)
endif()
* ``libcxx/utils/generate_feature_test_macro_components.py``: Add to
``lit_markup``
.. code-block:: python
"foo": ["UNSUPPORTED: libcpp-has-no-incomplete-foo"],
* ``libcxx/utils/generate_header_inclusion_tests.py``: Add to ``lit_markup``
.. code-block:: python
"foo": ["UNSUPPORTED: libcpp-has-no-incomplete-foo"],
* ``libcxx/utils/generate_header_tests.py``: Add to ``header_markup``
.. code-block:: python
"foo": ["ifndef _LIBCPP_HAS_NO_INCOMPLETE_FOO"],
* ``libcxx/utils/libcxx/test/features.py``: Add to ``macros``
.. code-block:: python
'_LIBCPP_HAS_NO_INCOMPLETE_FOO': 'libcpp-has-no-incomplete-foo',
* All tests that include ``<foo>`` should contain
.. code-block:: c++
// UNSUPPORTED: libcpp-has-no-incomplete-foo
Once the library is complete these changes and guards should be removed.

View File

@ -65,12 +65,16 @@ configuration all together. An example "__config" header generated when
#ifndef _LIBCPP_CONFIG_SITE
#define _LIBCPP_CONFIG_SITE
/* #undef _LIBCPP_HAS_NO_GLOBAL_FILESYSTEM_NAMESPACE */
/* #undef _LIBCPP_HAS_NO_STDIN */
/* #undef _LIBCPP_HAS_NO_STDOUT */
#define _LIBCPP_HAS_NO_THREADS
/* #undef _LIBCPP_HAS_NO_MONOTONIC_CLOCK */
/* #undef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS */
#endif
// -*- C++ -*-
//===----------------------------------------------------------------------===//
//===--------------------------- __config ---------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.

View File

@ -58,15 +58,6 @@ The following containers and classes support iterator debugging:
The remaining containers do not currently support iterator debugging.
Patches welcome.
Randomizing Unspecified Behavior (``_LIBCPP_DEBUG == 1``)
---------------------------------------------------------
This also enables the randomization of unspecified behavior, for
example, for equal elements in ``std::sort`` or randomizing both parts of
the partition after ``std::nth_element`` call. This effort helps you to migrate
to potential future faster versions of these algorithms and deflake your tests
which depend on such behavior. To fix the seed, use
``_LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY_SEED=seed`` definition.
Handling Assertion Failures
===========================
When a debug assertion fails the assertion handler is called via the

View File

@ -36,7 +36,7 @@ Design
======
* Annotate the two definitions of ``std::unique_ptr`` with ``clang::trivial_abi`` attribute.
* Put the attribute behind a flag because this change has potential compilation and runtime breakages.
* Put the attribuate behind a flag because this change has potential compilation and runtime breakages.
This comes with some side effects:

View File

@ -1,86 +0,0 @@
==================================
Unspecified Behavior Randomization
==================================
Background
==========
Consider the follow snippet which steadily happens in tests:
.. code-block:: cpp
std::vector<std::pair<int, int>> v(SomeData());
std::sort(v.begin(), v.end(), [](const auto& lhs, const auto& rhs) {
return lhs.first < rhs.first;
});
Under this assumption all elements in the vector whose first elements are equal
do not guarantee any order. Unfortunately, this prevents libcxx introducing
other implementatiosn because tests might silently fail and the users might
heavily depend on the stability of implementations.
Goal
===================
Provide functionality for randomizing the unspecified behavior so that the users
can test and migrate their components and libcxx can introduce new sorting
algorithms and optimizations to the containers.
For example, as of LLVM version 13, libcxx sorting algorithm takes
`O(n^2) worst case <https://llvm.org/PR20837>`_ but according
to the standard its worst case should be `O(n log n)`. This effort helps users
to gradually fix their tests while updating to new faster algorithms.
Design
======
* Introduce new macro `_LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY` which should
be a part of the libcxx config.
* This macro randomizes the unspecified behavior of algorithms and containers.
For example, for sorting algorithm the input range is shuffled and then
sorted.
* This macro is off by default because users should enable it only for testing
purposes and/or migrations if they happen to libcxx.
* This feature is only available for C++11 and further because of
`std::shuffle` availability.
* We may use `ASLR <https://en.wikipedia.org/wiki/Address_space_layout_randomization>`_ or
static `std::random_device` for seeding the random number generator. This
guarantees the same stability guarantee within a run but not through different
runs, for example, for tests become flaky and eventually be seen as broken.
For platforms which do not support ASLR, the seed is fixed during build.
* The users can fix the seed of the random number generator by providing
`_LIBCPP_RANDOMIZE_UNSPECIFIED_STABILITY_SEED=seed` definition.
This comes with some side effects if any of the flags is on:
* Computation penalty, we think users are OK with that if they use this feature.
* Non reproducible results if they don't use the fixed seed.
Impact
------------------
Google has measured couple of thousands of tests to be dependent on the
stability of sorting and selection algorithms. As we also plan on updating
(or least, providing under flag more) sorting algorithms, this effort helps
doing it gradually and sustainably. This is also bad for users to depend on the
unspecified behavior in their tests, this effort helps to turn this flag in
debug mode.
Potential breakages
-------------------
None if the flag is off. If the flag is on, it may lead to some non-reproducible
results, for example, for caching.
Currently supported randomization
---------------------------------
* `std::sort`, there is no guarantee on the order of equal elements
* `std::partial_sort`, there is no guarantee on the order of equal elements and
on the order of the remaining part
* `std::nth_element`, there is no guarantee on the order from both sides of the
partition
Patches welcome.

View File

@ -18,8 +18,8 @@ Status
======
.. table:: Current Status
:name: feature-status-table
:widths: auto
:name: feature-status-table
:widths: auto
================================================= =================
Macro Name Value
@ -190,7 +190,7 @@ Status
------------------------------------------------- -----------------
``__cpp_lib_bind_front`` ``201907L``
------------------------------------------------- -----------------
``__cpp_lib_bit_cast`` ``201806L``
``__cpp_lib_bit_cast`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_bitops`` *unimplemented*
------------------------------------------------- -----------------
@ -224,7 +224,7 @@ Status
------------------------------------------------- -----------------
``__cpp_lib_constexpr_vector`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_coroutine`` ``201902L``
``__cpp_lib_coroutine`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_destroying_delete`` ``201806L``
------------------------------------------------- -----------------
@ -290,46 +290,18 @@ Status
------------------------------------------------- -----------------
``__cpp_lib_to_array`` ``201907L``
------------------------------------------------- -----------------
``__cpp_lib_type_identity`` ``201806L``
------------------------------------------------- -----------------
``__cpp_lib_unwrap_ref`` ``201811L``
------------------------------------------------- -----------------
**C++ 2b**
-------------------------------------------------------------------
``__cpp_lib_adaptor_iterator_pair_constructor`` ``202106L``
------------------------------------------------- -----------------
``__cpp_lib_allocate_at_least`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_associative_heterogeneous_erasure`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_byteswap`` ``202110L``
------------------------------------------------- -----------------
``__cpp_lib_constexpr_typeinfo`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_invoke_r`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_is_scoped_enum`` ``202011L``
------------------------------------------------- -----------------
``__cpp_lib_monadic_optional`` ``202110L``
------------------------------------------------- -----------------
``__cpp_lib_move_only_function`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_out_ptr`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_ranges_starts_ends_with`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_ranges_zip`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_spanstream`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_stacktrace`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_stdatomic_h`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_string_contains`` ``202011L``
------------------------------------------------- -----------------
``__cpp_lib_string_resize_and_overwrite`` ``202110L``
------------------------------------------------- -----------------
``__cpp_lib_to_underlying`` ``202102L``
================================================= =================

View File

@ -1,51 +1,31 @@
.. raw:: html
<style type="text/css">
td { text-align: left; }
.notstarted { opacity: 60%; }
.nothingtodo {
background-color: #99FF99;
font-style: italic;
}
.inprogress {
background-color: #FFFF99;
font-style: italic;
}
.inreview { background-color: #FFFF99; }
.partial {
background-color: #2CCCFF;
font-style: italic;
}
.complete { background-color: #99FF99; }
.chrono { background-color: #D8BFD8; }
.format { background-color: #FFE4B5; }
.ranges { background-color: #7FFFD4; }
.spaceship { background-color: #B0E0E6; }
</style>
.. role:: notstarted
.. role:: nothingtodo
.. role:: inprogress
.. role:: inreview
.. role:: partial
.. role:: complete
.. |Not Started| replace:: :notstarted:`Not Started`
.. |Nothing To Do| replace:: :nothingtodo:`Nothing To Do`
.. |In Progress| replace:: :inprogress:`In Progress`
.. |Review| replace:: :inreview:`Review`
.. |Partial| replace:: :partial:`Partial`
.. |Complete| replace:: :complete:`Complete`
.. role:: chrono
.. role:: format
.. role:: ranges
.. role:: spaceship
.. |chrono| replace:: :chrono:`chrono`
.. |format| replace:: :format:`format`
.. |ranges| replace:: :ranges:`ranges`
.. |spaceship| replace:: :spaceship:`spaceship`
.. |sect| unicode:: U+00A7
.. |hellip| unicode:: U+2026
.. raw:: html
<style type="text/css">
.nothingtodo {
background-color: #99FF99;
font-style: italic;
}
.inprogress {
background-color: #FFFF99;
font-style: italic;
}
.partial {
background-color: #2CCCFF;
font-style: italic;
}
.complete { background-color: #99FF99; }
</style>
.. role:: nothingtodo
.. role:: inprogress
.. role:: partial
.. role:: complete
.. |Nothing To Do| replace:: :nothingtodo:`Nothing To Do`
.. |In Progress| replace:: :inprogress:`In Progress`
.. |Partial| replace:: :partial:`Partial`
.. |Complete| replace:: :complete:`Complete`
.. |sect| unicode:: U+00A7
.. |hellip| unicode:: U+2026

37
docs/Makefile.sphinx Normal file
View File

@ -0,0 +1,37 @@
# Makefile for Sphinx documentation
#
# FIXME: This hack is only in place to allow the libcxx.llvm.org/docs builder
# to work with libcxx. This should be removed when that builder supports
# out-of-tree builds.
# You can set these variables from the command line.
SPHINXOPTS = -n -W -v
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext default
default: html
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
clean:
-rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@# FIXME: Remove this `cp` once HTML->Sphinx transition is completed.
@# Kind of a hack, but HTML-formatted docs are on the way out anyway.
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."

View File

@ -1,5 +1,5 @@
=========================================
Libc++ 14.0.0 (In-Progress) Release Notes
Libc++ 13.0.0 Release Notes
=========================================
.. contents::
@ -8,17 +8,11 @@ Libc++ 14.0.0 (In-Progress) Release Notes
Written by the `Libc++ Team <https://libcxx.llvm.org>`_
.. warning::
These are in-progress notes for the upcoming libc++ 14 release.
Release notes for previous releases can be found on
`the Download Page <https://releases.llvm.org/download.html>`_.
Introduction
============
This document contains the release notes for the libc++ C++ Standard Library,
part of the LLVM Compiler Infrastructure, release 14.0.0. Here we describe the
part of the LLVM Compiler Infrastructure, release 13.0.0. Here we describe the
status of libc++ in some detail, including major improvements from the previous
release and new feature work. For the general LLVM release notes, see `the LLVM
documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM releases may
@ -32,214 +26,79 @@ main Libc++ web page, this document applies to the *next* release, not
the current one. To see the release notes for a specific release, please
see the `releases page <https://llvm.org/releases/>`_.
What's New in Libc++ 14.0.0?
What's New in Libc++ 13.0.0?
============================
- Support for older compilers has been removed. Several additional platforms
are now officially supported. :ref:`platform_and_compiler_support` contains
the complete overview of platforms and compilers supported by libc++.
- The large headers ``<algorithm>``, ``<iterator>``, and ``<utility>`` have
been split in more granular headers. This reduces the size of included code
when using libc++. This may lead to missing includes after upgrading to
libc++13.
New Features
------------
- There's support for the C++20 header ``<format>``. Some parts are still
missing, most notably the compile-time format string validation. Some
functions are known to be inefficient, both in memory usage and performance.
The implementation isn't API- or ABI-stable and therefore considered
experimental. (Some not-yet-implemented papers require an API-break.)
As a result, it is disabled by default, however vendors can enable the
header by using ``-DLIBCXX_ENABLE_INCOMPLETE_FEATURES=ON`` when
configuring their build.
- ``std::filesystem`` is now feature complete for the Windows platform using
MinGW. MSVC isn't supported since it lacks 128-bit integer support.
- The implementation of the C++20 concepts library has been completed.
- Several C++20 ``constexpr`` papers have been completed:
- More parts of ``<ranges>`` have been implemented. Since we still expect to make
some API and ABI breaking changes, those are disabled by default. However,
vendors that wish to enable ``<ranges>`` in their distribution may do so
by defining ``-DLIBCXX_ENABLE_INCOMPLETE_FEATURES=ON`` when configuring
their build.
- There's a new CMake option ``LIBCXX_ENABLE_UNICODE`` to disable Unicode
support in the ``<format>`` header. This only affects the estimation of the
output width of the format functions.
- Support for building libc++ on top of a C Standard Library that does not support ``wchar_t`` was
added. This is useful for building libc++ in an embedded setting, and it adds itself to the various
freestanding-friendly options provided by libc++.
- Defining ``_LIBCPP_DEBUG`` to ``1`` enables the randomization of unspecified
behavior in standard algorithms (e.g. the ordering of equal elements in ``std::sort``, or
the ordering of both sides of the partition in ``std::nth_element``).
- Floating-point support for ``std::to_chars`` support has been added.
Thanks to Stephan T. Lavavej and Microsoft for providing their implementation
to libc++.
- The C++20 ``<coroutine>`` implementation has been completed.
- `P0879R0 <https://wg21.link/P0879R0>`_ ``constexpr`` for ``std::swap()``
and swap related functions
- `P1032R1 <https://wg21.link/P1032R1>`_ Misc ``constexpr`` bits
- `P0883 <https://wg21.link/P0883>`_ Fixing Atomic Initialization
- More C++20 features have been implemented. :doc:`Status/Cxx20` has the full
overview of libc++'s C++20 implementation status.
- More C++2b features have been implemented. :doc:`Status/Cxx2b` has the
full overview of libc++'s C++2b implementation status.
- The CMake option ``LIBCXX_ENABLE_INCOMPLETE_FEATURES`` has been added. This
option allows libc++ vendors to disable headers that aren't production
quality yet. Currently, turning the option off disables the headers
``<format>`` and ``<ranges>``.
- The documentation conversion from html to restructured text has been
completed.
- More C++2b features have been implemented. :doc:`Status/Cxx2b` has the full
overview of libc++'s C++2b implementation status.
API and ABI Changes
-------------------
- 16-bit ``wchar_t`` handling added for ``codecvt_utf8``, ``codecvt_utf16`` and
``codecvt_utf8_utf16``.
- There has been several changes in the tuple constructors provided by libc++.
Those changes were made as part of an effort to regularize libc++'s tuple
implementation, which contained several subtle bugs due to these extensions.
If you notice a build breakage when initializing a tuple, make sure you
properly initialize all the tuple elements - this is probably the culprit.
API Changes
-----------
In particular, the extension allowing tuples to be constructed from fewer
elements than the number of elements in the tuple (in which case the remaining
elements would be default-constructed) has been removed. See https://godbolt.org/z/sqozjd.
- The functions ``std::atomic<T*>::fetch_(add|sub)`` and
``std::atomic_fetch_(add|sub)`` no longer accept a function pointer. While
this is technically an API break, the invalid syntax isn't supported by
libstdc++ and MSVC STL. See https://godbolt.org/z/49fvzz98d.
Also, the extension allowing a tuple to be constructed from an array has been
removed. See https://godbolt.org/z/5esqbW.
- The call of the functions ``std::atomic_(add|sub)(std::atomic<T*>*, ...)``
with the explicit template argument ``T`` are now ill-formed. While this is
technically an API break, the invalid syntax isn't supported by libstdc++ and
MSVC STL. See https://godbolt.org/z/v9959re3v.
- The ``std::pointer_safety`` utility and related functions are not available
in C++03 anymore. Furthermore, in other standard modes, it has changed from
a struct to a scoped enumeration, which is an ABI break. Finally, the
``std::get_pointer_safety`` function was previously in the dylib, but it
is now defined as inline in the headers.
Due to this change it's now possible to call these functions with the
explicit template argument ``T*``. This allows using the same syntax on the
major Standard library implementations.
See https://godbolt.org/z/oEfzPhTTb.
While this is technically both an API and an ABI break, we do not expect
``std::pointer_safety`` to have been used at all in real code, since we
never implemented the underlying support for garbage collection.
Calls to these functions where the template argument was deduced by the
compiler are unaffected by this change.
- The `LIBCXXABI_ENABLE_PIC` CMake option was removed. If you are building your
own libc++abi from source and were using `LIBCXXABI_ENABLE_PIC`, please use
`CMAKE_POSITION_INDEPENDENT_CODE=ON` instead.
- The functions ``std::allocator<T>::allocate`` and
``std::experimental::pmr::polymorphic_allocator<T>::allocate`` now throw
an exception of type ``std::bad_array_new_length`` when the requested size
exceeds the maximum supported size, as required by the C++ standard.
Previously the type ``std::length_error`` was used.
- When the header <variant> is included, it will no longer include <array> transitively.
- Removed the nonstandard methods ``std::chrono::file_clock::to_time_t`` and
``std::chrono::file_clock::from_time_t``; neither libstdc++ nor MSVC STL
had such methods. Instead, in C++20, you can use ``std::chrono::file_clock::from_sys``
and ``std::chrono::file_clock::to_sys``, which are specified in the Standard.
If you are not using C++20, you should move to it.
- The ``std::result_of`` and ``std::is_literal_type`` type traits have been removed in
C++20 mode.
- The declarations of functions ``declare_reachable``, ``undeclare_reachable``, ``declare_no_pointers``,
``undeclare_no_pointers``, and ``get_pointer_safety`` have been removed not only from C++2b but
from all modes. Their symbols are still provided by the dynamic library for the benefit of
existing compiled code. All of these functions have always behaved as no-ops.
- ``std::filesystem::path::iterator``, which (in our implementation) stashes
a ``path`` value inside itself similar to ``istream_iterator``, now sets its
``reference`` type to ``path`` and its ``iterator_category`` to ``input_iterator_tag``,
so that it is a conforming input iterator in C++17 and a conforming
``std::bidirectional_iterator`` in C++20. Before this release, it had set its
``reference`` type to ``const path&`` and its ``iterator_category`` to
``bidirectional_iterator_tag``, making it a non-conforming bidirectional iterator.
After this change, ``for`` loops of the form ``for (auto& c : path)`` must be rewritten
as either ``for (auto&& c : path)`` or ``for (const auto& c : path)``.
``std::reverse_iterator<path::iterator>`` is no longer rejected.
- Removed the nonstandard default constructor from ``std::chrono::month_weekday``.
You must now explicitly initialize with a ``chrono::month`` and
``chrono::weekday_indexed`` instead of "meh, whenever".
- C++20 requires that ``std::basic_string::reserve(n)`` never reduce the capacity
of the string. (For that, use ``shrink_to_fit()``.) Prior to this release, libc++'s
``std::basic_string::reserve(n)`` could reduce capacity in C++17 and before, but
not in C++20 and later. This caused ODR violations when mixing code compiled under
different Standard modes. After this change, libc++'s ``std::basic_string::reserve(n)``
never reduces capacity, even in C++17 and before.
C++20 deprecates the zero-argument overload of ``std::basic_string::reserve()``,
but specifically permits it to reduce capacity. To avoid breaking existing code
assuming that ``std::basic_string::reserve()`` will shrink, libc++ maintains
the behavior to shrink, even though that makes ``std::basic_string::reserve()`` not
a synonym for ``std::basic_string::reserve(0)`` in any Standard mode anymore.
- The ``<experimental/coroutine>`` header is deprecated, as is any
use of coroutines without C++20. Use C++20's ``<coroutine>`` header
instead. The ``<experimental/coroutine>`` header will be removed
in LLVM 16.
- ``_VSTD`` is now an alias for ``std`` instead of ``std::_LIBCPP_ABI_NAMESPACE``.
This is technically not a functional change, except for folks that might have been
using ``_VSTD`` in creative ways (which has never been officially supported).
ABI Changes
-----------
- The C++17 variable templates ``is_error_code_enum_v`` and
``is_error_condition_enum_v`` are now of type ``bool`` instead of ``size_t``.
- The C++03 emulation type for ``std::nullptr_t`` has been removed in favor of
using ``decltype(nullptr)`` in all standard modes. This is an ABI break for
anyone compiling in C++03 mode and who has ``std::nullptr_t`` as part of their
ABI. However, previously, these users' ABI would be incompatible with any other
binary or static archive compiled with C++11 or later. If you start seeing linker
errors involving ``std::nullptr_t`` against previously compiled binaries, this may
be the cause. You can define the ``_LIBCPP_ABI_USE_CXX03_NULLPTR_EMULATION`` macro
to return to the previous behavior. That macro will be removed in LLVM 15. Please
comment `on D109459 <https://reviews.llvm.org/D109459>`_ if you are broken by this change
and need to define the macro.
- On Apple platforms, ``std::random_device`` is now implemented on top of ``arc4random()``
instead of reading from ``/dev/urandom``. Any implementation-defined token used when
constructing a ``std::random_device`` will now be ignored instead of interpreted as a
file to read entropy from.
- ``std::lognormal_distribution::param_type`` used to store a data member of type
``std::normal_distribution``; now this member is stored in the ``lognormal_distribution``
class itself, and the ``param_type`` stores only the mean and standard deviation,
as required by the Standard. This changes ``sizeof(std::lognormal_distribution::param_type)``.
You can define the ``_LIBCPP_ABI_OLD_LOGNORMAL_DISTRIBUTION`` macro to return to the
previous behavior. That macro will be removed in LLVM 15. Please comment
`on PR52906 <https://llvm.org/PR52906>`_ if you are broken by this change and need to
define the macro.
Build System Changes
--------------------
- Building the libc++ shared or static library requires a C++ 20 capable compiler.
Consider using a Bootstrapping build to build libc++ with a fresh Clang if you
can't use the system compiler to build libc++ anymore.
- Historically, there have been numerous ways of building libc++, libc++abi, and libunwind.
This has led to at least 5 different ways to build the runtimes, which was impossible to
maintain with a good level of support. Starting with this release, libc++, libc++abi, and
libunwind support exactly two ways of being built, which should cater to all use-cases.
Furthermore, these builds are as lightweight as possible and will work consistently even
when targeting embedded platforms, which used not to be the case. :doc:`BuildingLibcxx`
describes those two ways of building. Please migrate over to the appropriate build
instructions as soon as possible.
All other ways to build are deprecated and will not be supported in the next release.
We understand that making these changes can be daunting. For that reason, here's a
summary of how to migrate from the two most common ways to build:
- If you were rooting your CMake invocation at ``<monorepo>/llvm`` and passing ``-DLLVM_ENABLE_PROJECTS=<...>``
(which was the previously advertised way to build the runtimes), please simply root your CMake invocation at
``<monorepo>/runtimes`` and pass ``-DLLVM_ENABLE_RUNTIMES=<...>``.
- If you were doing multiple CMake invocations, e.g. one rooted at ``<monorepo>/libcxx`` and one rooted
at ``<monorepo>/libcxxabi`` (this used to be called a "Standalone build"), please move them to a
single invocation like so:
.. code-block:: bash
$ cmake -S <monorepo>/libcxx -B libcxx-build <LIBCXX-OPTIONS>
$ cmake -S <monorepo>/libcxxabi -B libcxxabi-build <LIBCXXABI-OPTIONS>
should become
.. code-block:: bash
$ cmake -S <monorepo>/runtimes -B build -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" <LIBCXX-OPTIONS> <LIBCXXABI-OPTIONS>
- Support for building the runtimes using the GCC 32 bit multilib flag (``-m32``) has been removed. Support
for this had been flaky for a while, and we didn't know of anyone depending on this. Instead, please perform
a normal cross-compilation of the runtimes using the appropriate target, such as passing the following to
your bootstrapping build:
.. code-block:: bash
-DLLVM_RUNTIME_TARGETS=i386-unknown-linux
- Libc++, libc++abi, and libunwind will not be built with ``-fPIC`` by default anymore.
If you want to build those runtimes with position-independent code, please specify
``-DCMAKE_POSITION_INDEPENDENT_CODE=ON`` explicitly when configuring the build, or
``-DRUNTIMES_<target-name>_CMAKE_POSITION_INDEPENDENT_CODE=ON`` if using the
bootstrapping build.
- The ``{LIBCXX,LIBCXXABI,LIBUNWIND}_TARGET_TRIPLE``, ``{LIBCXX,LIBCXXABI,LIBUNWIND}_SYSROOT`` and
``{LIBCXX,LIBCXXABI,LIBUNWIND}_GCC_TOOLCHAIN`` CMake variables are deprecated. Instead, please use
the ``CMAKE_CXX_COMPILER_TARGET``, ``CMAKE_SYSROOT`` and ``CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN``
variables provided by CMake.
- The C++20 type ``std::counted_semaphore<N>`` is now based on ``std::atomic``
on all platforms, and does not use "native" semaphores such as pthreads
``sem_t`` even on platforms that would support them. This changes the layout
of ``counted_semaphore<N>`` notably on Linux, so it is an ABI break on that
platform. This change is needed to conform to the Standard, which requires
``counted_semaphore``'s constructor to be constexpr.

View File

@ -1,50 +1,52 @@
.. _cxx14-status:
================================
libc++ C++14 Status
================================
.. include:: ../Helpers/Styles.rst
.. contents::
:local:
Overview
================================
In April 2013, the C++ standard committee approved the draft for the next version of the C++ standard, initially known as "C++1y".
The draft standard includes papers and issues that were voted on at the previous three meetings (Kona, Portland, and Bristol).
In August 2014, this draft was approved by ISO as C++14.
This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx14>`__.
The groups that have contributed papers:
- CWG - Core Language Working group
- LWG - Library working group
- SG1 - Study group #1 (Concurrency working group)
.. _paper-status-cxx14:
Paper Status
====================================
.. csv-table::
:file: Cxx14Papers.csv
:header-rows: 1
:widths: auto
.. _issues-status-cxx14:
Library Working Group Issues Status
====================================
.. csv-table::
:file: Cxx14Issues.csv
:header-rows: 1
:widths: auto
.. _cxx14-status:
================================
libc++ C++14 Status
================================
.. include:: ../Helpers/Styles.rst
.. contents::
:local:
Overview
================================
In April 2013, the C++ standard committee approved the draft for the next version of the C++ standard, initially known as "C++1y".
The draft standard includes papers and issues that were voted on at the previous three meetings (Kona, Portland, and Bristol).
In August 2014, this draft was approved by ISO as C++14.
This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx14>`__.
The groups that have contributed papers:
- CWG - Core Language Working group
- LWG - Library working group
- SG1 - Study group #1 (Concurrency working group)
.. _paper-status-cxx14:
Paper Status
====================================
.. csv-table::
:file: Cxx14Papers.csv
:header-rows: 1
:widths: auto
.. _issues-status-cxx14:
Library Working Group Issues Status
====================================
.. csv-table::
:file: Cxx14Issues.csv
:header-rows: 1
:widths: auto
Last Updated: 25-Mar-2014

View File

@ -1,55 +1,57 @@
.. _cxx17-status:
================================
libc++ C++17 Status
================================
.. include:: ../Helpers/Styles.rst
.. contents::
:local:
Overview
================================
In November 2014, the C++ standard committee created a draft for the next version of the C++ standard, initially known as "C++1z".
In February 2017, the C++ standard committee approved this draft, and sent it to ISO for approval as C++17.
This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx17>`__.
.. attention:: Features in unreleased drafts of the standard are subject to change.
The groups that have contributed papers:
- CWG - Core Language Working group
- LWG - Library working group
- SG1 - Study group #1 (Concurrency working group)
.. note:: "Nothing to do" means that no library changes were needed to implement this change.
.. _paper-status-cxx17:
Paper Status
====================================
.. csv-table::
:file: Cxx17Papers.csv
:header-rows: 1
:widths: auto
.. note::
.. [#note-P0067] P0067: ``std::(to|from)_chars`` for integrals has been available since version 7.0. ``std::to_chars`` for ``float`` and ``double`` since version 14.0 ``std::to_chars`` for ``long double`` uses the implementation for ``double``.
.. [#note-P0607] P0607: The parts of P0607 that are not done are the ``<regex>`` bits.
.. _issues-status-cxx17:
Library Working Group Issues Status
====================================
.. csv-table::
:file: Cxx17Issues.csv
:header-rows: 1
:widths: auto
.. _cxx17-status:
================================
libc++ C++17 Status
================================
.. include:: ../Helpers/Styles.rst
.. contents::
:local:
Overview
================================
In November 2014, the C++ standard committee created a draft for the next version of the C++ standard, initially known as "C++1z".
In February 2017, the C++ standard committee approved this draft, and sent it to ISO for approval as C++17.
This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx17>`__.
.. attention:: Features in unreleased drafts of the standard are subject to change.
The groups that have contributed papers:
- CWG - Core Language Working group
- LWG - Library working group
- SG1 - Study group #1 (Concurrency working group)
.. note:: "Nothing to do" means that no library changes were needed to implement this change.
.. _paper-status-cxx17:
Paper Status
====================================
.. csv-table::
:file: Cxx17Papers.csv
:header-rows: 1
:widths: auto
.. note::
.. [#note-P0433] P0433: So far, only the ``<string>``, sequence containers, container adaptors and ``<regex>`` portions of P0433 have been implemented.
.. [#note-P0607] P0607: The parts of P0607 that are not done are the ``<regex>`` bits.
.. _issues-status-cxx17:
Library Working Group Issues Status
====================================
.. csv-table::
:file: Cxx17Issues.csv
:header-rows: 1
:widths: auto
Last Updated: 17-Nov-2020

View File

@ -114,7 +114,7 @@
"`2557 <https://wg21.link/LWG2557>`__","Logical operator traits are broken in the zero-argument case","Jacksonville","|Complete|",""
"`2558 <https://wg21.link/LWG2558>`__","[fund.ts.v2] Logical operator traits are broken in the zero-argument case","Jacksonville","|Complete|",""
"`2559 <https://wg21.link/LWG2559>`__","Error in LWG 2234's resolution","Jacksonville","|Complete|",""
"`2560 <https://wg21.link/LWG2560>`__","``is_constructible``\ underspecified when applied to a function type","Jacksonville","|Complete|",""
"`2560 <https://wg21.link/LWG2560>`__","``is_constructible``\ underspecified when applied to a function type","Jacksonville","Broken in 3.6; See r261653.",""
"`2565 <https://wg21.link/LWG2565>`__","``std::function``\ 's move constructor should guarantee nothrow for ``reference_wrapper``\ s and function pointers","Jacksonville","|Complete|",""
"`2566 <https://wg21.link/LWG2566>`__","Requirements on the first template parameter of container adaptors","Jacksonville","|Complete|",""
"`2571 <https://wg21.link/LWG2571>`__","|sect|\ [map.modifiers]/2 imposes nonsensical requirement on ``insert(InputIterator, InputIterator)``\ ","Jacksonville","|Complete|",""

1 Issue # Issue Name Meeting Status First released version
114 `2557 <https://wg21.link/LWG2557>`__ Logical operator traits are broken in the zero-argument case Jacksonville |Complete|
115 `2558 <https://wg21.link/LWG2558>`__ [fund.ts.v2] Logical operator traits are broken in the zero-argument case Jacksonville |Complete|
116 `2559 <https://wg21.link/LWG2559>`__ Error in LWG 2234's resolution Jacksonville |Complete|
117 `2560 <https://wg21.link/LWG2560>`__ ``is_constructible``\ underspecified when applied to a function type Jacksonville |Complete| Broken in 3.6; See r261653.
118 `2565 <https://wg21.link/LWG2565>`__ ``std::function``\ 's move constructor should guarantee nothrow for ``reference_wrapper``\ s and function pointers Jacksonville |Complete|
119 `2566 <https://wg21.link/LWG2566>`__ Requirements on the first template parameter of container adaptors Jacksonville |Complete|
120 `2571 <https://wg21.link/LWG2571>`__ |sect|\ [map.modifiers]/2 imposes nonsensical requirement on ``insert(InputIterator, InputIterator)``\ Jacksonville |Complete|

View File

@ -71,7 +71,7 @@
"`P0394r4 <https://wg21.link/P0394r4>`__","LWG","Hotel Parallelifornia: terminate() for Parallel Algorithms Exception Handling","Oulu","",""
"","","","","",""
"`P0003R5 <https://wg21.link/P0003R5>`__","LWG","Removing Deprecated Exception Specifications from C++17","Issaquah","|Complete|","5.0"
"`P0067R5 <https://wg21.link/P0067R5>`__","LWG","Elementary string conversions, revision 5","Issaquah","|Partial| [#note-P0067]",""
"`P0067R5 <https://wg21.link/P0067R5>`__","LWG","Elementary string conversions, revision 5","Issaquah","|Partial|",""
"`P0403R1 <https://wg21.link/P0403R1>`__","LWG","Literal suffixes for ``basic_string_view``\ ","Issaquah","|Complete|","4.0"
"`P0414R2 <https://wg21.link/P0414R2>`__","LWG","Merging shared_ptr changes from Library Fundamentals to C++17","Issaquah","|Complete|","11.0"
"`P0418R2 <https://wg21.link/P0418R2>`__","LWG","Fail or succeed: there is no atomic lattice","Issaquah","",""
@ -94,14 +94,14 @@
"`P0298R3 <https://wg21.link/P0298R3>`__","CWG","A byte type definition","Kona","|Complete|","5.0"
"`P0317R1 <https://wg21.link/P0317R1>`__","LWG","Directory Entry Caching for Filesystem","Kona","|Complete|","7.0"
"`P0430R2 <https://wg21.link/P0430R2>`__","LWG","File system library on non-POSIX-like operating systems","Kona","|Complete|","7.0"
"`P0433R2 <https://wg21.link/P0433R2>`__","LWG","Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library","Kona","|Complete|","14.0"
"`P0433R2 <https://wg21.link/P0433R2>`__","LWG","Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library","Kona","|In Progress| [#note-P0433]_","7.0"
"`P0452R1 <https://wg21.link/P0452R1>`__","LWG","Unifying <numeric> Parallel Algorithms","Kona","",""
"`P0467R2 <https://wg21.link/P0467R2>`__","LWG","Iterator Concerns for Parallel Algorithms","Kona","",""
"`P0492R2 <https://wg21.link/P0492R2>`__","LWG","Proposed Resolution of C++17 National Body Comments for Filesystems","Kona","|Complete|","7.0"
"`P0518R1 <https://wg21.link/P0518R1>`__","LWG","Allowing copies as arguments to function objects given to parallel algorithms in response to CH11","Kona","",""
"`P0523R1 <https://wg21.link/P0523R1>`__","LWG","Wording for CH 10: Complexity of parallel algorithms","Kona","",""
"`P0548R1 <https://wg21.link/P0548R1>`__","LWG","common_type and duration","Kona","|Complete|","5.0"
"`P0558R1 <https://wg21.link/P0558R1>`__","LWG","Resolving atomic<T> named base class inconsistencies","Kona","|Complete|",""
"`P0558R1 <https://wg21.link/P0558R1>`__","LWG","Resolving atomic<T> named base class inconsistencies","Kona","",""
"`P0574R1 <https://wg21.link/P0574R1>`__","LWG","Algorithm Complexity Constraints and Parallel Overloads","Kona","",""
"`P0599R1 <https://wg21.link/P0599R1>`__","LWG","noexcept for hash functions","Kona","|Complete|","5.0"
"`P0604R0 <https://wg21.link/P0604R0>`__","LWG","Resolving GB 55, US 84, US 85, US 86","Kona","|Complete|",""

1 Paper # Group Paper Name Meeting Status First released version
71 `P0394r4 <https://wg21.link/P0394r4>`__ LWG Hotel Parallelifornia: terminate() for Parallel Algorithms Exception Handling Oulu
72
73 `P0003R5 <https://wg21.link/P0003R5>`__ LWG Removing Deprecated Exception Specifications from C++17 Issaquah |Complete| 5.0
74 `P0067R5 <https://wg21.link/P0067R5>`__ LWG Elementary string conversions, revision 5 Issaquah |Partial| [#note-P0067] |Partial|
75 `P0403R1 <https://wg21.link/P0403R1>`__ LWG Literal suffixes for ``basic_string_view``\ Issaquah |Complete| 4.0
76 `P0414R2 <https://wg21.link/P0414R2>`__ LWG Merging shared_ptr changes from Library Fundamentals to C++17 Issaquah |Complete| 11.0
77 `P0418R2 <https://wg21.link/P0418R2>`__ LWG Fail or succeed: there is no atomic lattice Issaquah
94 `P0298R3 <https://wg21.link/P0298R3>`__ CWG A byte type definition Kona |Complete| 5.0
95 `P0317R1 <https://wg21.link/P0317R1>`__ LWG Directory Entry Caching for Filesystem Kona |Complete| 7.0
96 `P0430R2 <https://wg21.link/P0430R2>`__ LWG File system library on non-POSIX-like operating systems Kona |Complete| 7.0
97 `P0433R2 <https://wg21.link/P0433R2>`__ LWG Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library Kona |Complete| |In Progress| [#note-P0433]_ 14.0 7.0
98 `P0452R1 <https://wg21.link/P0452R1>`__ LWG Unifying <numeric> Parallel Algorithms Kona
99 `P0467R2 <https://wg21.link/P0467R2>`__ LWG Iterator Concerns for Parallel Algorithms Kona
100 `P0492R2 <https://wg21.link/P0492R2>`__ LWG Proposed Resolution of C++17 National Body Comments for Filesystems Kona |Complete| 7.0
101 `P0518R1 <https://wg21.link/P0518R1>`__ LWG Allowing copies as arguments to function objects given to parallel algorithms in response to CH11 Kona
102 `P0523R1 <https://wg21.link/P0523R1>`__ LWG Wording for CH 10: Complexity of parallel algorithms Kona
103 `P0548R1 <https://wg21.link/P0548R1>`__ LWG common_type and duration Kona |Complete| 5.0
104 `P0558R1 <https://wg21.link/P0558R1>`__ LWG Resolving atomic<T> named base class inconsistencies Kona |Complete|
105 `P0574R1 <https://wg21.link/P0574R1>`__ LWG Algorithm Complexity Constraints and Parallel Overloads Kona
106 `P0599R1 <https://wg21.link/P0599R1>`__ LWG noexcept for hash functions Kona |Complete| 5.0
107 `P0604R0 <https://wg21.link/P0604R0>`__ LWG Resolving GB 55, US 84, US 85, US 86 Kona |Complete|

View File

@ -1,58 +1,59 @@
.. _cxx20-status:
================================
libc++ C++20 Status
================================
.. include:: ../Helpers/Styles.rst
.. contents::
:local:
Overview
================================
In July 2017, the C++ standard committee created a draft for the next version of the C++ standard, initially known as "C++2a".
In September 2020, the C++ standard committee approved this draft, and sent it to ISO for approval as C++20.
This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx20>`__.
.. attention:: Features in unreleased drafts of the standard are subject to change.
The groups that have contributed papers:
- CWG - Core Language Working group
- LWG - Library working group
- SG1 - Study group #1 (Concurrency working group)
.. note:: "Nothing to do" means that no library changes were needed to implement this change.
.. _paper-status-cxx20:
Paper Status
====================================
.. csv-table::
:file: Cxx20Papers.csv
:header-rows: 1
:widths: auto
.. note::
.. [#note-P0600] P0600: The missing bits in P0600 are in |sect|\ [mem.res.class] and |sect|\ [mem.poly.allocator.class].
.. [#note-P0645] P0645: The paper is implemented but still marked as an incomplete feature. Not yet implemented LWG-issues will cause API and ABI breakage.
.. [#note-P0966] P0966: It was previously erroneously marked as complete in version 8.0. See `bug 45368 <https://llvm.org/PR45368>`__.
.. [#note-P0619] P0619: Only sections D.8, D.9, D.10 and D.13 are implemented. Sections D.4, D.7, D.11, D.12, and D.14 remain undone.
.. [#note-P0883] P0883: shared_ptr and floating-point changes weren't applied as they themselves aren't implemented yet.
.. _issues-status-cxx20:
Library Working Group Issues Status
====================================
.. csv-table::
:file: Cxx20Issues.csv
:header-rows: 1
:widths: auto
.. _cxx20-status:
================================
libc++ C++20 Status
================================
.. include:: ../Helpers/Styles.rst
.. contents::
:local:
Overview
================================
In July 2017, the C++ standard committee created a draft for the next version of the C++ standard, initially known as "C++2a".
In September 2020, the C++ standard committee approved this draft, and sent it to ISO for approval as C++20.
This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx20>`__.
.. attention:: Features in unreleased drafts of the standard are subject to change.
The groups that have contributed papers:
- CWG - Core Language Working group
- LWG - Library working group
- SG1 - Study group #1 (Concurrency working group)
.. note:: "Nothing to do" means that no library changes were needed to implement this change.
.. _paper-status-cxx20:
Paper Status
====================================
.. csv-table::
:file: Cxx20Papers.csv
:header-rows: 1
:widths: auto
.. note::
.. [#note-P0600] P0600: The missing bits in P0600 are in |sect|\ [mem.res.class], |sect|\ [mem.poly.allocator.class], and |sect|\ [container.node.overview].
.. [#note-P0966] P0966: It was previously erroneously marked as complete in version 8.0. See `bug 45368 <https://llvm.org/PR45368>`__.
.. [#note-P0619] P0619: Only sections D.8, D.9, D.10 and D.13 are implemented. Sections D.4, D.7, D.11, D.12, and D.14 remain undone.
.. [#note-P0883] P0883: shared_ptr and floating-point changes weren't applied as they themselves aren't implemented yet.
.. _issues-status-cxx20:
Library Working Group Issues Status
====================================
.. csv-table::
:file: Cxx20Issues.csv
:header-rows: 1
:widths: auto
Last Updated: 24-May-2021

View File

@ -1,4 +1,4 @@
"Issue #","Issue Name","Meeting","Status","First released version","Labels"
"Issue #","Issue Name","Meeting","Status","First released version"
"`2070 <https://wg21.link/LWG2070>`__","``allocate_shared``\ should use ``allocator_traits<A>::construct``\ ","Toronto","Resolved by `P0674R1 <https://wg21.link/P0674R1>`__",""
"`2444 <https://wg21.link/LWG2444>`__","Inconsistent complexity for ``std::sort_heap``\ ","Toronto","",""
"`2593 <https://wg21.link/LWG2593>`__","Moved-from state of Allocators","Toronto","",""
@ -23,7 +23,7 @@
"`2950 <https://wg21.link/LWG2950>`__","std::byte operations are misspecified","Albuquerque","|Complete|",""
"`2952 <https://wg21.link/LWG2952>`__","iterator_traits should work for pointers to cv T","Albuquerque","|Complete|",""
"`2953 <https://wg21.link/LWG2953>`__","LWG 2853 should apply to deque::erase too","Albuquerque","|Complete|",""
"`2958 <https://wg21.link/LWG2958>`__","Moves improperly defined as deleted","Albuquerque","|Complete|",""
"`2958 <https://wg21.link/LWG2958>`__","Moves improperly defined as deleted","Albuquerque","*We already do this*",""
"`2964 <https://wg21.link/LWG2964>`__","Apparently redundant requirement for dynamic_pointer_cast","Albuquerque","",""
"`2965 <https://wg21.link/LWG2965>`__","Non-existing path::native_string() in filesystem_error::what() specification","Albuquerque","|Nothing To Do|",""
"`2972 <https://wg21.link/LWG2972>`__","What is ``is_trivially_destructible_v<int>``\ ?","Albuquerque","|Complete|",""
@ -32,12 +32,12 @@
"`2978 <https://wg21.link/LWG2978>`__","Hash support for pmr::string and friends","Albuquerque","",""
"`2979 <https://wg21.link/LWG2979>`__","aligned_union should require complete object types","Albuquerque","|Complete|",""
"`2980 <https://wg21.link/LWG2980>`__","Cannot compare_exchange empty pointers","Albuquerque","",""
"`2981 <https://wg21.link/LWG2981>`__","Remove redundant deduction guides from standard library","Albuquerque","|Nothing To Do|",""
"`2981 <https://wg21.link/LWG2981>`__","Remove redundant deduction guides from standard library","Albuquerque","",""
"`2982 <https://wg21.link/LWG2982>`__","Making size_type consistent in associative container deduction guides","Albuquerque","",""
"`2988 <https://wg21.link/LWG2988>`__","Clause 32 cleanup missed one typename","Albuquerque","|Complete|","13.0"
"`2988 <https://wg21.link/LWG2988>`__","Clause 32 cleanup missed one typename","Albuquerque","",""
"`2993 <https://wg21.link/LWG2993>`__","reference_wrapper<T> conversion from T&&","Albuquerque","|Complete|","13.0"
"`2998 <https://wg21.link/LWG2998>`__","Requirements on function objects passed to {``forward_``,}list-specific algorithms","Albuquerque","|Nothing To Do|",""
"`3001 <https://wg21.link/LWG3001>`__","weak_ptr::element_type needs remove_extent_t","Albuquerque","|Complete|","14.0"
"`3001 <https://wg21.link/LWG3001>`__","weak_ptr::element_type needs remove_extent_t","Albuquerque","",""
"`3024 <https://wg21.link/LWG3024>`__","variant's copies must be deleted instead of disabled via SFINAE","Albuquerque","|Complete|",""
"","","","",""
"`2164 <https://wg21.link/LWG2164>`__","What are the semantics of ``vector.emplace(vector.begin(), vector.back())``\ ?","Jacksonville","|Complete|",""
@ -70,7 +70,7 @@
"`3041 <https://wg21.link/LWG3041>`__","Unnecessary ``decay``\ in ``reference_wrapper``\ ","Jacksonville","|Complete|",""
"`3042 <https://wg21.link/LWG3042>`__","``is_literal_type_v``\ should be inline","Jacksonville","|Complete|",""
"`3043 <https://wg21.link/LWG3043>`__","Bogus postcondition for ``filesystem_error``\ constructor","Jacksonville","|Complete|",""
"`3045 <https://wg21.link/LWG3045>`__","``atomic<floating-point>``\ doesn't have ``value_type``\ or ``difference_type``\ ","Jacksonville","",""
"`3045 <https://wg21.link/LWG3045>`__","``atomic<*floating-point*>``\ doesn't have ``value_type``\ or ``difference_type``\ ","Jacksonville","",""
"`3048 <https://wg21.link/LWG3048>`__","``transform_reduce(exec, first1, last1, first2, init)``\ discards execution policy","Jacksonville","",""
"`3051 <https://wg21.link/LWG3051>`__","Floating point classifications were inadvertently changed in P0175","Jacksonville","|Nothing To Do|",""
"`3075 <https://wg21.link/LWG3075>`__","``basic_string``\ needs deduction guides from ``basic_string_view``\ ","Jacksonville","|Complete|",""
@ -108,14 +108,14 @@
"`3025 <https://wg21.link/LWG3025>`__","Map-like container deduction guides should use ``pair<Key, T>``\ , not ``pair<const Key, T>``\ ","San Diego","|Complete|",""
"`3031 <https://wg21.link/LWG3031>`__","Algorithms and predicates with non-const reference arguments","San Diego","",""
"`3037 <https://wg21.link/LWG3037>`__","``polymorphic_allocator``\ and incomplete types","San Diego","",""
"`3038 <https://wg21.link/LWG3038>`__","``polymorphic_allocator::allocate``\ should not allow integer overflow to create vulnerabilities","San Diego","|Complete|","14.0"
"`3038 <https://wg21.link/LWG3038>`__","``polymorphic_allocator::allocate``\ should not allow integer overflow to create vulnerabilities","San Diego","",""
"`3054 <https://wg21.link/LWG3054>`__","``uninitialized_copy``\ appears to not be able to meet its exception-safety guarantee","San Diego","",""
"`3065 <https://wg21.link/LWG3065>`__","LWG 2989 missed that all ``path``\ 's other operators should be hidden friends as well","San Diego","|Complete|",""
"`3096 <https://wg21.link/LWG3096>`__","``path::lexically_relative``\ is confused by trailing slashes","San Diego","|Complete|",""
"`3116 <https://wg21.link/LWG3116>`__","``OUTERMOST_ALLOC_TRAITS``\ needs ``remove_reference_t``\ ","San Diego","",""
"`3116 <https://wg21.link/LWG3116>`__","``*OUTERMOST_ALLOC_TRAITS*``\ needs ``remove_reference_t``\ ","San Diego","",""
"`3122 <https://wg21.link/LWG3122>`__","``__cpp_lib_chrono_udls``\ was accidentally dropped","San Diego","|Complete|",""
"`3127 <https://wg21.link/LWG3127>`__","``basic_osyncstream::rdbuf``\ needs a ``const_cast``\ ","San Diego","",""
"`3128 <https://wg21.link/LWG3128>`__","``strstream::rdbuf``\ needs a ``const_cast``\ ","San Diego","|Nothing To Do|",""
"`3127 <https://wg21.link/LWG3127>`__","``basic_osyncstream::rdbuf``\ needs a ````const_cast````\ ","San Diego","",""
"`3128 <https://wg21.link/LWG3128>`__","``strstream::rdbuf``\ needs a ````const_cast````\ ","San Diego","|Nothing To Do|",""
"`3129 <https://wg21.link/LWG3129>`__","``regex_token_iterator``\ constructor uses wrong pointer arithmetic","San Diego","",""
"`3130 <https://wg21.link/LWG3130>`__","|sect|\ [input.output] needs many ``addressof``\ ","San Diego","",""
"`3131 <https://wg21.link/LWG3131>`__","``addressof``\ all the things","San Diego","",""
@ -125,7 +125,7 @@
"`3145 <https://wg21.link/LWG3145>`__","``file_clock``\ breaks ABI for C++17 implementations","San Diego","|Complete|",""
"`3147 <https://wg21.link/LWG3147>`__","Definitions of ""likely"" and ""unlikely"" are likely to cause problems","San Diego","",""
"`3148 <https://wg21.link/LWG3148>`__","``<concepts>``\ should be freestanding","San Diego","",""
"`3153 <https://wg21.link/LWG3153>`__","``Common``\ and ``common_type``\ have too little in common","San Diego","|Complete|","13.0"
"`3153 <https://wg21.link/LWG3153>`__","``Common``\ and ``common_type``\ have too little in common","San Diego","",""
"`3154 <https://wg21.link/LWG3154>`__","``Common``\ and ``CommonReference``\ have a common defect","San Diego","",""
"","","","",""
"`3012 <https://wg21.link/LWG3012>`__","``atomic<T>``\ is unimplementable for non-``is_trivially_copy_constructible T``\ ","Kona","",""
@ -136,22 +136,22 @@
"`3112 <https://wg21.link/LWG3112>`__","``system_error``\ and ``filesystem_error``\ constructors taking a ``string``\ may not be able to meet their postconditions","Kona","",""
"`3119 <https://wg21.link/LWG3119>`__","Program-definedness of closure types","Kona","|Nothing To Do|",""
"`3133 <https://wg21.link/LWG3133>`__","Modernizing numeric type requirements","Kona","",""
"`3144 <https://wg21.link/LWG3144>`__","``span``\ does not have a ``const_pointer``\ typedef","Kona","|Complete|",""
"`3173 <https://wg21.link/LWG3173>`__","Enable CTAD for ``ref-view``\ ","Kona","","","|ranges|"
"`3179 <https://wg21.link/LWG3179>`__","``subrange``\ should always model ``Range``\ ","Kona","","","|ranges|"
"`3180 <https://wg21.link/LWG3180>`__","Inconsistently named return type for ``ranges::minmax_element``\ ","Kona","","","|ranges|"
"`3144 <https://wg21.link/LWG3144>`__","``span``\ does not have a ````const_pointer````\ typedef","Kona","|Complete|",""
"`3173 <https://wg21.link/LWG3173>`__","Enable CTAD for *``ref-view``*\ ","Kona","",""
"`3179 <https://wg21.link/LWG3179>`__","``subrange``\ should always model ``Range``\ ","Kona","",""
"`3180 <https://wg21.link/LWG3180>`__","Inconsistently named return type for ``ranges::minmax_element``\ ","Kona","",""
"`3182 <https://wg21.link/LWG3182>`__","Specification of ``Same``\ could be clearer","Kona","",""
"","","","",""
"`2899 <https://wg21.link/LWG2899>`__","``is_(nothrow_)move_constructible``\ and ``tuple``\ , ``optional``\ and ``unique_ptr``\ ","Cologne","",""
"`3055 <https://wg21.link/LWG3055>`__","``path::operator+=(*single-character*)``\ misspecified","Cologne","|Complete|","7.0"
"`3158 <https://wg21.link/LWG3158>`__","``tuple(allocator_arg_t, const Alloc&)``\ should be conditionally explicit","Cologne","|Complete|","10.0"
"`3169 <https://wg21.link/LWG3169>`__","``ranges``\ permutation generators discard useful information","Cologne","","","|ranges|"
"`3183 <https://wg21.link/LWG3183>`__","Normative permission to specialize Ranges variable templates","Cologne","","","|ranges|"
"`3158 <https://wg21.link/LWG3158>`__","``tuple(allocator_arg_t, const Alloc&)``\ should be conditionally explicit","Cologne","",""
"`3169 <https://wg21.link/LWG3169>`__","``ranges``\ permutation generators discard useful information","Cologne","",""
"`3183 <https://wg21.link/LWG3183>`__","Normative permission to specialize Ranges variable templates","Cologne","",""
"`3184 <https://wg21.link/LWG3184>`__","Inconsistencies in ``bind_front``\ wording","Cologne","|Complete|","13.0"
"`3185 <https://wg21.link/LWG3185>`__","Uses-allocator construction functions missing ``constexpr``\ and ``noexcept``\ ","Cologne","",""
"`3186 <https://wg21.link/LWG3186>`__","``ranges``\ removal, partition, and ``partial_sort_copy``\ algorithms discard useful information","Cologne","","","|ranges|"
"`3186 <https://wg21.link/LWG3186>`__","``ranges``\ removal, partition, and ``partial_sort_copy``\ algorithms discard useful information","Cologne","",""
"`3187 <https://wg21.link/LWG3187>`__","`P0591R4 <https://wg21.link/p0591r4>`__ reverted DR 2586 fixes to ``scoped_allocator_adaptor::construct()``\ ","Cologne","",""
"`3191 <https://wg21.link/LWG3191>`__","``std::ranges::shuffle``\ synopsis does not match algorithm definition","Cologne","","","|ranges|"
"`3191 <https://wg21.link/LWG3191>`__","``std::ranges::shuffle``\ synopsis does not match algorithm definition","Cologne","",""
"`3196 <https://wg21.link/LWG3196>`__","``std::optional<T>``\ is ill-formed is ``T``\ is an array","Cologne","|Complete|",""
"`3198 <https://wg21.link/LWG3198>`__","Bad constraint on ``std::span::span()``\ ","Cologne","|Complete|",""
"`3199 <https://wg21.link/LWG3199>`__","``istream >> bitset<0>``\ fails","Cologne","",""
@ -161,140 +161,140 @@
"`3209 <https://wg21.link/LWG3209>`__","Expression in ``year::ok()``\ returns clause is ill-formed","Cologne","|Complete|",""
"","","","",""
"`3231 <https://wg21.link/LWG3231>`__","``year_month_day_last::day``\ specification does not cover ``!ok()``\ values","Belfast","|Nothing To Do|",""
"`3225 <https://wg21.link/LWG3225>`__","``zoned_time``\ converting constructor shall not be ``noexcept``\ ","Belfast","","","|chrono|"
"`3190 <https://wg21.link/LWG3190>`__","``std::allocator::allocate``\ sometimes returns too little storage","Belfast","|Complete|","14.0"
"`3218 <https://wg21.link/LWG3218>`__","Modifier for ``%d``\ parse flag does not match POSIX and ``format``\ specification","Belfast","","","|chrono| |format|"
"`3224 <https://wg21.link/LWG3224>`__","``zoned_time``\ constructor from ``TimeZonePtr``\ does not specify initialization of ``tp_``\ ","Belfast","","","|chrono|"
"`3230 <https://wg21.link/LWG3230>`__","Format specifier ``%y/%Y``\ is missing locale alternative versions","Belfast","","","|chrono| |format|"
"`3232 <https://wg21.link/LWG3232>`__","Inconsistency in ``zoned_time``\ deduction guides","Belfast","","","|chrono|"
"`3225 <https://wg21.link/LWG3225>`__","``zoned_time``\ converting constructor shall not be ``noexcept``\ ","Belfast","",""
"`3190 <https://wg21.link/LWG3190>`__","``std::allocator::allocate``\ sometimes returns too little storage","Belfast","",""
"`3218 <https://wg21.link/LWG3218>`__","Modifier for ``%d``\ parse flag does not match POSIX and ``format``\ specification","Belfast","",""
"`3224 <https://wg21.link/LWG3224>`__","``zoned_time``\ constructor from ``TimeZonePtr``\ does not specify initialization of ``tp_``\ ","Belfast","",""
"`3230 <https://wg21.link/LWG3230>`__","Format specifier ``%y/%Y``\ is missing locale alternative versions","Belfast","",""
"`3232 <https://wg21.link/LWG3232>`__","Inconsistency in ``zoned_time``\ deduction guides","Belfast","",""
"`3222 <https://wg21.link/LWG3222>`__","P0574R1 introduced preconditions on non-existent parameters","Belfast","",""
"`3221 <https://wg21.link/LWG3221>`__","Result of ``year_month``\ arithmetic with ``months``\ is ambiguous","Belfast","|Complete|","8.0"
"`3235 <https://wg21.link/LWG3235>`__","``parse``\ manipulator without abbreviation is not callable","Belfast","",""
"`3246 <https://wg21.link/LWG3246>`__","What are the constraints on the template parameter of ``basic_format_arg``\ ?","Belfast","","","|format|"
"`3246 <https://wg21.link/LWG3246>`__","What are the constraints on the template parameter of ``basic_format_arg``\ ?","Belfast","",""
"`3253 <https://wg21.link/LWG3253>`__","``basic_syncbuf::basic_syncbuf()``\ should not be explicit","Belfast","",""
"`3245 <https://wg21.link/LWG3245>`__","Unnecessary restriction on ``'%p'``\ parse specifier","Belfast","","","|chrono|"
"`3245 <https://wg21.link/LWG3245>`__","Unnecessary restriction on ``'%p'``\ parse specifier","Belfast","",""
"`3244 <https://wg21.link/LWG3244>`__","Constraints for ``Source``\ in |sect|\ [fs.path.req] insufficiently constrainty","Belfast","",""
"`3241 <https://wg21.link/LWG3241>`__","``chrono-spec``\ grammar ambiguity in |sect|\ [time.format]","Belfast","","","|chrono| |format|"
"`3241 <https://wg21.link/LWG3241>`__","``chrono-spec``\ grammar ambiguity in |sect|\ [time.format]","Belfast","",""
"`3257 <https://wg21.link/LWG3257>`__","Missing feature testing macro update from P0858","Belfast","",""
"`3256 <https://wg21.link/LWG3256>`__","Feature testing macro for ``constexpr``\ algorithms","Belfast","|Complete|","13.0"
"`3273 <https://wg21.link/LWG3273>`__","Specify ``weekday_indexed``\ to range of ``[0, 7]``\ ","Belfast","","","|chrono|"
"`3273 <https://wg21.link/LWG3273>`__","Specify ``weekday_indexed``\ to range of ``[0, 7]``\ ","Belfast","",""
"`3070 <https://wg21.link/LWG3070>`__","``path::lexically_relative``\ causes surprising results if a filename can also be a *root-name*","Belfast","",""
"`3266 <https://wg21.link/LWG3266>`__","``to_chars(bool)``\ should be deleted","Belfast","|Complete|","14.0"
"`3272 <https://wg21.link/LWG3272>`__","``%I%p``\ should parse/format ``duration``\ since midnight","Belfast","","","|chrono| |format|"
"`3259 <https://wg21.link/LWG3259>`__","The definition of *constexpr iterators* should be adjusted","Belfast","","","|ranges|"
"`3266 <https://wg21.link/LWG3266>`__","``to_chars(bool)``\ should be deleted","Belfast","",""
"`3272 <https://wg21.link/LWG3272>`__","``%I%p``\ should parse/format ``duration``\ since midnight","Belfast","",""
"`3259 <https://wg21.link/LWG3259>`__","The definition of *constexpr iterators* should be adjusted","Belfast","",""
"`3103 <https://wg21.link/LWG3103>`__","Errors in taking subview of ``span``\ should be ill-formed where possible","Belfast","",""
"`3274 <https://wg21.link/LWG3274>`__","Missing feature test macro for ``<span>``\ ","Belfast","|Complete|","11.0"
"`3276 <https://wg21.link/LWG3276>`__","Class ``split_view::outer_iterator::value_type``\ should inherit from ``view_interface``\ ","Belfast","","","|ranges|"
"`3277 <https://wg21.link/LWG3277>`__","Pre-increment on prvalues is not a requirement of ``weakly_incrementable``\ ","Belfast","","","|ranges|"
"`3274 <https://wg21.link/LWG3274>`__","Missing feature test macro for ``<span>``\ ","Belfast","",""
"`3276 <https://wg21.link/LWG3276>`__","Class ``split_view::outer_iterator::value_type``\ should inherit from ``view_interface``\ ","Belfast","",""
"`3277 <https://wg21.link/LWG3277>`__","Pre-increment on prvalues is not a requirement of ``weakly_incrementable``\ ","Belfast","",""
"`3149 <https://wg21.link/LWG3149>`__","``DefaultConstructible``\ should require default initialization","Belfast","|Complete|","13.0"
"","","","",""
"`1203 <https://wg21.link/LWG1203>`__","More useful rvalue stream insertion","Prague","|Complete|","12.0"
"`2859 <https://wg21.link/LWG2859>`__","Definition of *reachable* in [ptr.launder] misses pointer arithmetic from pointer-interconvertible object","Prague","",""
"`3018 <https://wg21.link/LWG3018>`__","``shared_ptr``\ of function type","Prague","",""
"`3050 <https://wg21.link/LWG3050>`__","Conversion specification problem in ``chrono::duration``\ constructor","Prague","","","|chrono|"
"`3050 <https://wg21.link/LWG3050>`__","Conversion specification problem in ``chrono::duration``\ constructor","Prague","",""
"`3141 <https://wg21.link/LWG3141>`__","``CopyConstructible``\ doesn't preserve source values","Prague","|Nothing to do|",""
"`3150 <https://wg21.link/LWG3150>`__","``UniformRandomBitGenerator``\ should validate ``min``\ and ``max``\ ","Prague","|Complete|","13.0"
"`3175 <https://wg21.link/LWG3175>`__","The ``CommonReference``\ requirement of concept ``SwappableWith``\ is not satisfied in the example","Prague","|Complete|","13.0"
"`3194 <https://wg21.link/LWG3194>`__","``ConvertibleTo``\ prose does not match code","Prague","|Complete|","13.0"
"`3200 <https://wg21.link/LWG3200>`__","``midpoint``\ should not constrain ``T``\ is complete","Prague","|Nothing To Do|",""
"`3201 <https://wg21.link/LWG3201>`__","``lerp``\ should be marked as ``noexcept``\ ","Prague","|Complete|",""
"`3226 <https://wg21.link/LWG3226>`__","``zoned_time``\ constructor from ``string_view``\ should accept ``zoned_time<Duration2, TimeZonePtr2>``\ ","Prague","","","|chrono|"
"`3226 <https://wg21.link/LWG3226>`__","``zoned_time``\ constructor from ``string_view``\ should accept ``zoned_time<Duration2, TimeZonePtr2>``\ ","Prague","",""
"`3233 <https://wg21.link/LWG3233>`__","Broken requirements for ``shared_ptr``\ converting constructors","Prague","",""
"`3237 <https://wg21.link/LWG3237>`__","LWG 3038 and 3190 have inconsistent PRs","Prague","|Complete|","14.0"
"`3237 <https://wg21.link/LWG3237>`__","LWG 3038 and 3190 have inconsistent PRs","Prague","",""
"`3238 <https://wg21.link/LWG3238>`__","Insufficiently-defined behavior of ``std::function``\ deduction guides","Prague","",""
"`3242 <https://wg21.link/LWG3242>`__","``std::format``\ : missing rules for ``arg-id``\ in ``width``\ and ``precision``\ ","Prague","|Complete|","Clang 14","|format|"
"`3243 <https://wg21.link/LWG3243>`__","``std::format``\ and negative zeroes","Prague","|Complete|","14.0","|format|"
"`3247 <https://wg21.link/LWG3247>`__","``ranges::iter_move``\ should perform ADL-only lookup of ``iter_move``\ ","Prague","","","|ranges|"
"`3248 <https://wg21.link/LWG3248>`__","``std::format``\ ``#b``\ , ``#B``\ , ``#o``\ , ``#x``\ , and ``#X``\ presentation types misformat negative numbers","Prague","|Complete|","14.0","|format|"
"`3250 <https://wg21.link/LWG3250>`__","``std::format``\ : ``#``\ (alternate form) for NaN and inf","Prague","|Complete|","14.0","|format|"
"`3251 <https://wg21.link/LWG3251>`__","Are ``std::format``\ alignment specifiers applied to string arguments?","Prague","|Complete|","14.0","|format|"
"`3252 <https://wg21.link/LWG3252>`__","Parse locale's aware modifiers for commands are not consistent with POSIX spec","Prague","","","|chrono|"
"`3242 <https://wg21.link/LWG3242>`__","``std::format``\ : missing rules for ``arg-id``\ in ``width``\ and ``precision``\ ","Prague","",""
"`3243 <https://wg21.link/LWG3243>`__","``std::format``\ and negative zeroes","Prague","",""
"`3247 <https://wg21.link/LWG3247>`__","``ranges::iter_move``\ should perform ADL-only lookup of ``iter_move``\ ","Prague","",""
"`3248 <https://wg21.link/LWG3248>`__","``std::format``\ ``#b``\ , ``#B``\ , ``#o``\ , ``#x``\ , and ``#X``\ presentation types misformat negative numbers","Prague","",""
"`3250 <https://wg21.link/LWG3250>`__","``std::format``\ : ``#``\ (alternate form) for NaN and inf","Prague","",""
"`3251 <https://wg21.link/LWG3251>`__","Are ``std::format``\ alignment specifiers applied to string arguments?","Prague","",""
"`3252 <https://wg21.link/LWG3252>`__","Parse locale's aware modifiers for commands are not consistent with POSIX spec","Prague","",""
"`3254 <https://wg21.link/LWG3254>`__","Strike ``stop_token``\ 's ``operator!=``\ ","Prague","",""
"`3255 <https://wg21.link/LWG3255>`__","``span``\ 's ``array``\ constructor is too strict","Prague","|Complete|",""
"`3260 <https://wg21.link/LWG3260>`__","``year_month*``\ arithmetic rejects durations convertible to years","Prague","","","|chrono|"
"`3262 <https://wg21.link/LWG3262>`__","Formatting of negative durations is not specified","Prague","","","|chrono| |format|"
"`3264 <https://wg21.link/LWG3264>`__","``sized_range``\ and ``ranges::size``\ redundantly use ``disable_sized_range``\ ","Prague","","","|ranges|"
"`3269 <https://wg21.link/LWG3269>`__","Parse manipulators do not specify the result of the extraction from stream","Prague","","","|chrono|"
"`3270 <https://wg21.link/LWG3270>`__","Parsing and formatting ``%j``\ with ``duration``\ s","Prague","","","|chrono| |format|"
"`3280 <https://wg21.link/LWG3280>`__","View converting constructors can cause constraint recursion and are unneeded","Prague","","","|ranges|"
"`3281 <https://wg21.link/LWG3281>`__","Conversion from ``*pair-like*``\ types to ``subrange``\ is a silent semantic promotion","Prague","","","|ranges|"
"`3282 <https://wg21.link/LWG3282>`__","``subrange``\ converting constructor should disallow derived to base conversions","Prague","","","|ranges|"
"`3284 <https://wg21.link/LWG3284>`__","``random_access_iterator``\ semantic constraints accidentally promote difference type using unary negate","Prague","","","|ranges|"
"`3260 <https://wg21.link/LWG3260>`__","``year_month*``\ arithmetic rejects durations convertible to years","Prague","",""
"`3262 <https://wg21.link/LWG3262>`__","Formatting of negative durations is not specified","Prague","",""
"`3264 <https://wg21.link/LWG3264>`__","``sized_range``\ and ``ranges::size``\ redundantly use ``disable_sized_range``\ ","Prague","",""
"`3269 <https://wg21.link/LWG3269>`__","Parse manipulators do not specify the result of the extraction from stream","Prague","",""
"`3270 <https://wg21.link/LWG3270>`__","Parsing and formatting ``%j``\ with ``duration``\ s","Prague","",""
"`3280 <https://wg21.link/LWG3280>`__","View converting constructors can cause constraint recursion and are unneeded","Prague","",""
"`3281 <https://wg21.link/LWG3281>`__","Conversion from ``*pair-like*``\ types to ``subrange``\ is a silent semantic promotion","Prague","",""
"`3282 <https://wg21.link/LWG3282>`__","``subrange``\ converting constructor should disallow derived to base conversions","Prague","",""
"`3284 <https://wg21.link/LWG3284>`__","``random_access_iterator``\ semantic constraints accidentally promote difference type using unary negate","Prague","",""
"`3285 <https://wg21.link/LWG3285>`__","The type of a customization point object shall satisfy ``semiregular``\ ","Prague","",""
"`3286 <https://wg21.link/LWG3286>`__","``ranges::size``\ is not required to be valid after a call to ``ranges::begin``\ on an input range","Prague","","","|ranges|"
"`3291 <https://wg21.link/LWG3291>`__","``iota_view::iterator``\ has the wrong ``iterator_category``\ ","Prague","","","|ranges|"
"`3292 <https://wg21.link/LWG3292>`__","``iota_view``\ is under-constrained","Prague","","","|ranges|"
"`3294 <https://wg21.link/LWG3294>`__","``zoned_time``\ deduction guides misinterprets ``string``\ /``char*``\ ","Prague","","","|chrono|"
"`3286 <https://wg21.link/LWG3286>`__","``ranges::size``\ is not required to be valid after a call to ``ranges::begin``\ on an input range","Prague","",""
"`3291 <https://wg21.link/LWG3291>`__","``iota_view::iterator``\ has the wrong ``iterator_category``\ ","Prague","",""
"`3292 <https://wg21.link/LWG3292>`__","``iota_view``\ is under-constrained","Prague","",""
"`3294 <https://wg21.link/LWG3294>`__","``zoned_time``\ deduction guides misinterprets ``string``\ /``char*``\ ","Prague","",""
"`3296 <https://wg21.link/LWG3296>`__","Inconsistent default argument for ``basic_regex<>::assign``\ ","Prague","|Complete|",""
"`3299 <https://wg21.link/LWG3299>`__","Pointers don't need customized iterator behavior","Prague","","","|ranges|"
"`3299 <https://wg21.link/LWG3299>`__","Pointers don't need customized iterator behavior","Prague","",""
"`3300 <https://wg21.link/LWG3300>`__","Non-array ``ssize``\ overload is underconstrained","Prague","",""
"`3301 <https://wg21.link/LWG3301>`__","``transform_view::iterator``\ has incorrect ``iterator_category``\ ","Prague","","","|ranges|"
"`3302 <https://wg21.link/LWG3302>`__","Range adaptor objects ``keys``\ and ``values``\ are unspecified","Prague","","","|ranges|"
"`3301 <https://wg21.link/LWG3301>`__","``transform_view::iterator``\ has incorrect ``iterator_category``\ ","Prague","",""
"`3302 <https://wg21.link/LWG3302>`__","Range adaptor objects ``keys``\ and ``values``\ are unspecified","Prague","",""
"`3303 <https://wg21.link/LWG3303>`__","Bad ""``constexpr``\ "" marker for ``destroy/destroy_n``\ ","Prague","",""
"`3304 <https://wg21.link/LWG3304>`__","Allocate functions of ``std::polymorphic_allocator``\ should require ``[[nodiscard]]``\ ","Prague","",""
"`3307 <https://wg21.link/LWG3307>`__","``std::allocator<void>().allocate(n)``\ ","Prague","",""
"`3310 <https://wg21.link/LWG3310>`__","Replace ``SIZE_MAX``\ with ``numeric_limits<size_t>::max()``\ ","Prague","",""
"`3313 <https://wg21.link/LWG3313>`__","``join_view::iterator::operator--``\ is incorrectly constrained","Prague","","","|ranges|"
"`3314 <https://wg21.link/LWG3314>`__","Is stream insertion behavior locale dependent when ``Period::type``\ is ``micro``\ ?","Prague","","","|chrono|"
"`3313 <https://wg21.link/LWG3313>`__","``join_view::iterator::operator--``\ is incorrectly constrained","Prague","",""
"`3314 <https://wg21.link/LWG3314>`__","Is stream insertion behavior locale dependent when ``Period::type``\ is ``micro``\ ?","Prague","",""
"`3315 <https://wg21.link/LWG3315>`__","Correct Allocator Default Behavior","Prague","",""
"`3316 <https://wg21.link/LWG3316>`__","Correctly define epoch for ``utc_clock``\ / ``utc_timepoint``\ ","Prague","","","|chrono|"
"`3317 <https://wg21.link/LWG3317>`__","Incorrect ``operator<<``\ for floating-point durations","Prague","","","|chrono|"
"`3318 <https://wg21.link/LWG3318>`__","Clarify whether clocks can represent time before their epoch","Prague","","","|chrono|"
"`3319 <https://wg21.link/LWG3319>`__","Properly reference specification of IANA time zone database","Prague","","","|chrono|"
"`3316 <https://wg21.link/LWG3316>`__","Correctly define epoch for ``utc_clock``\ / ``utc_timepoint``\ ","Prague","",""
"`3317 <https://wg21.link/LWG3317>`__","Incorrect ``operator<<``\ for floating-point durations","Prague","",""
"`3318 <https://wg21.link/LWG3318>`__","Clarify whether clocks can represent time before their epoch","Prague","",""
"`3319 <https://wg21.link/LWG3319>`__","Properly reference specification of IANA time zone database","Prague","",""
"`3320 <https://wg21.link/LWG3320>`__","``span::cbegin/cend``\ methods produce different results than ``std::[ranges::]cbegin/cend``\ ","Prague","|Complete|",""
"`3321 <https://wg21.link/LWG3321>`__","``uninitialized_construct_using_allocator``\ should use ``construct_at``\ ","Prague","",""
"`3323 <https://wg21.link/LWG3323>`__","``*has-tuple-element*``\ helper concept needs ``convertible_to``\ ","Prague","","","|ranges|"
"`3324 <https://wg21.link/LWG3324>`__","Special-case ``std::strong/weak/partial_order``\ for pointers","Prague","|Complete|","14.0","|spaceship|"
"`3325 <https://wg21.link/LWG3325>`__","Constrain return type of transformation function for ``transform_view``\ ","Prague","","","|ranges|"
"`3326 <https://wg21.link/LWG3326>`__","``enable_view``\ has false positives","Prague","|In progress|","","|ranges|"
"`3327 <https://wg21.link/LWG3327>`__","Format alignment specifiers vs. text direction","Prague","|Nothing To Do|","","|format|"
"`3323 <https://wg21.link/LWG3323>`__","``*has-tuple-element*``\ helper concept needs ``convertible_to``\ ","Prague","",""
"`3324 <https://wg21.link/LWG3324>`__","Special-case ``std::strong/weak/partial_order``\ for pointers","Prague","",""
"`3325 <https://wg21.link/LWG3325>`__","Constrain return type of transformation function for ``transform_view``\ ","Prague","",""
"`3326 <https://wg21.link/LWG3326>`__","``enable_view``\ has false positives","Prague","|In progress|",""
"`3327 <https://wg21.link/LWG3327>`__","Format alignment specifiers vs. text direction","Prague","|Nothing To Do|",""
"`3328 <https://wg21.link/LWG3328>`__","Clarify that ``std::string``\ is not good for UTF-8","Prague","",""
"`3329 <https://wg21.link/LWG3329>`__","``totally_ordered_with``\ both directly and indirectly requires ``common_reference_with``\ ","Prague","|Complete|","13.0"
"`3330 <https://wg21.link/LWG3330>`__","Include ``<compare>``\ from most library headers","Prague","|Complete|","13.0","|spaceship|"
"`3331 <https://wg21.link/LWG3331>`__","Define ``totally_ordered/_with``\ in terms of ``partially-ordered-with``\ ","Prague","|Complete|","13.0"
"`3332 <https://wg21.link/LWG3332>`__","Issue in |sect|\ [time.format]","Prague","","","|chrono| |format|"
"`3330 <https://wg21.link/LWG3330>`__","Include ``<compare>``\ from most library headers","Prague","",""
"`3331 <https://wg21.link/LWG3331>`__","Define ``totally_ordered/_with``\ in terms of ``*partially-ordered-with*``\ ","Prague","|Complete|","13.0"
"`3332 <https://wg21.link/LWG3332>`__","Issue in |sect|\ [time.format]","Prague","",""
"`3334 <https://wg21.link/LWG3334>`__","``basic_osyncstream``\ move assignment and destruction calls ``basic_syncbuf::emit()``\ twice","Prague","",""
"`3335 <https://wg21.link/LWG3335>`__","Resolve C++20 NB comments US 273 and GB 274","Prague","","","|ranges|"
"`3335 <https://wg21.link/LWG3335>`__","Resolve C++20 NB comments US 273 and GB 274","Prague","",""
"`3338 <https://wg21.link/LWG3338>`__","Rename ``default_constructible``\ to ``default_initializable``\ ","Prague","|Complete|","13.0"
"`3340 <https://wg21.link/LWG3340>`__","Formatting functions should throw on argument/format string mismatch in |sect|\ [format.functions]","Prague","|Complete|","14.0","|format|"
"`3340 <https://wg21.link/LWG3340>`__","Formatting functions should throw on argument/format string mismatch in |sect|\ [format.functions]","Prague","",""
"`3346 <https://wg21.link/LWG3346>`__","``pair``\ and ``tuple``\ copy and move constructor have backwards specification","Prague","",""
"`3347 <https://wg21.link/LWG3347>`__","``std::pair<T, U>``\ now requires ``T``\ and ``U``\ to be less-than-comparable","Prague","",""
"`3348 <https://wg21.link/LWG3348>`__","``__cpp_lib_unwrap_ref``\ in wrong header","Prague","|Complete|","12.0"
"`3348 <https://wg21.link/LWG3348>`__","``__cpp_lib_unwrap_ref``\ in wrong header","Prague","",""
"`3349 <https://wg21.link/LWG3349>`__","Missing ``__cpp_lib_constexpr_complex``\ for P0415R1","Prague","",""
"`3350 <https://wg21.link/LWG3350>`__","Simplify return type of ``lexicographical_compare_three_way``\ ","Prague","","","|spaceship|"
"`3351 <https://wg21.link/LWG3351>`__","``ranges::enable_safe_range``\ should not be constrained","Prague","","","|ranges|"
"`3352 <https://wg21.link/LWG3352>`__","``strong_equality``\ isn't a thing","Prague","|Nothing To Do|","","|spaceship|"
"`3354 <https://wg21.link/LWG3354>`__","``has_strong_structural_equality``\ has a meaningless definition","Prague","","","|spaceship|"
"`3355 <https://wg21.link/LWG3355>`__","The memory algorithms should support move-only input iterators introduced by P1207","Prague","","","|ranges|"
"`3356 <https://wg21.link/LWG3356>`__","``__cpp_lib_nothrow_convertible``\ should be ``__cpp_lib_is_nothrow_convertible``\ ","Prague","|Complete|","12.0"
"`3350 <https://wg21.link/LWG3350>`__","Simplify return type of ``lexicographical_compare_three_way``\ ","Prague","",""
"`3351 <https://wg21.link/LWG3351>`__","``ranges::enable_safe_range``\ should not be constrained","Prague","",""
"`3352 <https://wg21.link/LWG3352>`__","``strong_equality``\ isn't a thing","Prague","",""
"`3354 <https://wg21.link/LWG3354>`__","``has_strong_structural_equality``\ has a meaningless definition","Prague","",""
"`3355 <https://wg21.link/LWG3355>`__","The memory algorithms should support move-only input iterators introduced by P1207","Prague","",""
"`3356 <https://wg21.link/LWG3356>`__","``__cpp_lib_nothrow_convertible``\ should be ``__cpp_lib_is_nothrow_convertible``\ ","Prague","",""
"`3358 <https://wg21.link/LWG3358>`__","|sect|\ [span.cons] is mistaken that ``to_address``\ can throw","Prague","",""
"`3359 <https://wg21.link/LWG3359>`__","``<chrono>``\ leap second support should allow for negative leap seconds","Prague","","","|chrono|"
"`3360 <https://wg21.link/LWG3360>`__","``three_way_comparable_with``\ is inconsistent with similar concepts","Prague","|Nothing To Do|","","|spaceship|"
"`3359 <https://wg21.link/LWG3359>`__","``<chrono>``\ leap second support should allow for negative leap seconds","Prague","",""
"`3360 <https://wg21.link/LWG3360>`__","``three_way_comparable_with``\ is inconsistent with similar concepts","Prague","",""
"`3362 <https://wg21.link/LWG3362>`__","Strike ``stop_source``\ 's ``operator!=``\ ","Prague","",""
"`3363 <https://wg21.link/LWG3363>`__","``drop_while_view``\ should opt-out of ``sized_range``\ ","Prague","","","|ranges|"
"`3364 <https://wg21.link/LWG3364>`__","Initialize data members of ranges and their iterators","Prague","","","|ranges|"
"`3363 <https://wg21.link/LWG3363>`__","``drop_while_view``\ should opt-out of ``sized_range``\ ","Prague","",""
"`3364 <https://wg21.link/LWG3364>`__","Initialize data members of ranges and their iterators","Prague","",""
"`3367 <https://wg21.link/LWG3367>`__","Integer-class conversions should not throw","Prague","",""
"`3369 <https://wg21.link/LWG3369>`__","``span``\ 's deduction-guide for built-in arrays doesn't work","Prague","|Complete|","14.0"
"`3371 <https://wg21.link/LWG3371>`__","``visit_format_arg``\ and ``make_format_args``\ are not hidden friends","Prague","|Complete|","14.0","|format|"
"`3372 <https://wg21.link/LWG3372>`__","``vformat_to``\ should not try to deduce ``Out``\ twice","Prague","|Complete|","14.0","|format|"
"`3373 <https://wg21.link/LWG3373>`__","``{to,from}_chars_result``\ and ``format_to_n_result``\ need the ""we really mean what we say"" wording","Prague","|Complete|","14.0","|format|"
"`3369 <https://wg21.link/LWG3369>`__","``span``\ 's deduction-guide for built-in arrays doesn't work","Prague","",""
"`3371 <https://wg21.link/LWG3371>`__","``visit_format_arg``\ and ``make_format_args``\ are not hidden friends","Prague","",""
"`3372 <https://wg21.link/LWG3372>`__","``vformat_to``\ should not try to deduce ``Out``\ twice","Prague","",""
"`3373 <https://wg21.link/LWG3373>`__","``{to,from}_chars_result``\ and ``format_to_n_result``\ need the ""we really mean what we say"" wording","Prague","",""
"`3374 <https://wg21.link/LWG3374>`__","P0653 + P1006 should have made the other ``std::to_address``\ overload ``constexpr``\ ","Prague","|Complete|","12.0"
"`3375 <https://wg21.link/LWG3375>`__","``decay``\ in ``viewable_range``\ should be ``remove_cvref``\ ","Prague","","","|ranges|"
"`3377 <https://wg21.link/LWG3377>`__","``elements_view::iterator``\ befriends a specialization of itself","Prague","","","|ranges|"
"`3375 <https://wg21.link/LWG3375>`__","``decay``\ in ``viewable_range``\ should be ``remove_cvref``\ ","Prague","",""
"`3377 <https://wg21.link/LWG3377>`__","``elements_view::iterator``\ befriends a specialization of itself","Prague","",""
"`3379 <https://wg21.link/LWG3379>`__","""``safe``\ "" in several library names is misleading","Prague","|In Progress|",""
"`3380 <https://wg21.link/LWG3380>`__","``common_type``\ and comparison categories","Prague","","","|spaceship|"
"`3381 <https://wg21.link/LWG3381>`__","``begin``\ and ``data``\ must agree for ``contiguous_range``\ ","Prague","","","|ranges|"
"`3380 <https://wg21.link/LWG3380>`__","``common_type``\ and comparison categories","Prague","",""
"`3381 <https://wg21.link/LWG3381>`__","``begin``\ and ``data``\ must agree for ``contiguous_range``\ ","Prague","",""
"`3382 <https://wg21.link/LWG3382>`__","NTTP for ``pair``\ and ``array``\ ","Prague","",""
"`3383 <https://wg21.link/LWG3383>`__","|sect|\ [time.zone.leap.nonmembers] ``sys_seconds``\ should be replaced with ``seconds``\ ","Prague","","","|chrono|"
"`3384 <https://wg21.link/LWG3384>`__","``transform_view::*sentinel*``\ has an incorrect ``operator-``\ ","Prague","","","|ranges|"
"`3385 <https://wg21.link/LWG3385>`__","``common_iterator``\ is not sufficiently constrained for non-copyable iterators","Prague","","","|ranges|"
"`3387 <https://wg21.link/LWG3387>`__","|sect|\ [range.reverse.view] ``reverse_view<V>``\ unintentionally requires ``range<const V>``\ ","Prague","","","|ranges|"
"`3388 <https://wg21.link/LWG3388>`__","``view``\ iterator types have ill-formed ``<=>``\ operators","Prague","","","|ranges|"
"`3389 <https://wg21.link/LWG3389>`__","A move-only iterator still does not have a ``counted_iterator``\ ","Prague","","","|ranges|"
"`3390 <https://wg21.link/LWG3390>`__","``make_move_iterator()``\ cannot be used to construct a ``move_iterator``\ for a move-only iterator","Prague","|Complete|","14.0","|ranges|"
"`3393 <https://wg21.link/LWG3393>`__","Missing/incorrect feature test macro for coroutines","Prague","|Complete|","14.0"
"`3395 <https://wg21.link/LWG3395>`__","Definition for three-way comparison needs to be updated (US 152)","Prague","","","|spaceship|"
"`3383 <https://wg21.link/LWG3383>`__","|sect|\ [time.zone.leap.nonmembers] ``sys_seconds``\ should be replaced with ``seconds``\ ","Prague","",""
"`3384 <https://wg21.link/LWG3384>`__","``transform_view::*sentinel*``\ has an incorrect ``operator-``\ ","Prague","",""
"`3385 <https://wg21.link/LWG3385>`__","``common_iterator``\ is not sufficiently constrained for non-copyable iterators","Prague","",""
"`3387 <https://wg21.link/LWG3387>`__","|sect|\ [range.reverse.view] ``reverse_view<V>``\ unintentionally requires ``range<const V>``\ ","Prague","",""
"`3388 <https://wg21.link/LWG3388>`__","``view``\ iterator types have ill-formed ``<=>``\ operators","Prague","",""
"`3389 <https://wg21.link/LWG3389>`__","A move-only iterator still does not have a ``counted_iterator``\ ","Prague","",""
"`3390 <https://wg21.link/LWG3390>`__","``make_move_iterator()``\ cannot be used to construct a ``move_iterator``\ for a move-only iterator","Prague","",""
"`3393 <https://wg21.link/LWG3393>`__","Missing/incorrect feature test macro for coroutines","Prague","",""
"`3395 <https://wg21.link/LWG3395>`__","Definition for three-way comparison needs to be updated (US 152)","Prague","",""
"`3396 <https://wg21.link/LWG3396>`__","Clarify point of reference for ``source_location::current()``\ (DE 169)","Prague","",""
"`3397 <https://wg21.link/LWG3397>`__","``ranges::basic_istream_view::iterator``\ should not provide ``iterator_category``\ ","Prague","","","|ranges|"
"`3398 <https://wg21.link/LWG3398>`__","``tuple_element_t``\ is also wrong for ``const subrange``\ ","Prague","|Complete|","14.0","|ranges|"
"`3397 <https://wg21.link/LWG3397>`__","``ranges::basic_istream_view::iterator``\ should not provide ``iterator_category``\ ","Prague","",""
"`3398 <https://wg21.link/LWG3398>`__","``tuple_element_t``\ is also wrong for ``const subrange``\ ","Prague","",""
"`3446 <https://wg21.link/LWG3446>`__","``indirectly_readable_traits``\ ambiguity for types with both ``value_type``\ and ``element_type``\ ","November virtual meeting","|Complete|","13.0"

Can't render this file because it has a wrong number of fields in line 2.

View File

@ -22,14 +22,14 @@
"`P0753R2 <https://wg21.link/P0753R2>`__","LWG","Manipulators for C++ Synchronized Buffered Ostream","Jacksonville","",""
"`P0754R2 <https://wg21.link/P0754R2>`__","LWG","<version>","Jacksonville","|Complete|","7.0"
"`P0809R0 <https://wg21.link/P0809R0>`__","LWG","Comparing Unordered Containers","Jacksonville","|Nothing To Do|",""
"`P0858R0 <https://wg21.link/P0858R0>`__","LWG","Constexpr iterator requirements","Jacksonville","|Complete|","12.0"
"`P0858R0 <https://wg21.link/P0858R0>`__","LWG","Constexpr iterator requirements","Jacksonville","",""
"`P0905R1 <https://wg21.link/P0905R1>`__","CWG","Symmetry for spaceship","Jacksonville","",""
"`P0966R1 <https://wg21.link/P0966R1>`__","LWG","``string::reserve``\ Should Not Shrink","Jacksonville","|Complete| [#note-P0966]_","12.0"
"","","","","",""
"`P0019R8 <https://wg21.link/P0019R8>`__","LWG","Atomic Ref","Rapperswil","",""
"`P0458R2 <https://wg21.link/P0458R2>`__","LWG","Checking for Existence of an Element in Associative Containers","Rapperswil","|Complete|","13.0"
"`P0475R1 <https://wg21.link/P0475R1>`__","LWG","LWG 2511: guaranteed copy elision for piecewise construction","Rapperswil","|Complete|",""
"`P0476R2 <https://wg21.link/P0476R2>`__","LWG","Bit-casting object representations","Rapperswil","|Complete|","14.0"
"`P0476R2 <https://wg21.link/P0476R2>`__","LWG","Bit-casting object representations","Rapperswil","",""
"`P0528R3 <https://wg21.link/P0528R3>`__","CWG","The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange","Rapperswil","",""
"`P0542R5 <https://wg21.link/P0542R5>`__","CWG","Support for contract based programming in C++","Rapperswil","*Removed in Cologne*","n/a"
"`P0556R3 <https://wg21.link/P0556R3>`__","LWG","Integral power-of-2 operations","Rapperswil","|Complete|","9.0"
@ -98,110 +98,105 @@
"`P1463R1 <https://wg21.link/P1463R1>`__","LWG","Mandating the Standard Library: Clause 21 - Containers library","Kona","",""
"`P1464R1 <https://wg21.link/P1464R1>`__","LWG","Mandating the Standard Library: Clause 22 - Iterators library","Kona","|Complete|","9.0"
"","","","","",""
"`P0325R4 <https://wg21.link/P0325R4>`__","LWG","to_array from LFTS with updates","Cologne","|Complete|","10.0"
"`P0408R7 <https://wg21.link/P0408R7>`__","LWG","Efficient Access to basic_stringbuf's Buffer","Cologne","",""
"`P0466R5 <https://wg21.link/P0466R5>`__","LWG","Layout-compatibility and Pointer-interconvertibility Traits","Cologne","",""
"`P0553R4 <https://wg21.link/P0553R4>`__","LWG","Bit operations","Cologne","|Complete|","9.0"
"`P0631R8 <https://wg21.link/P0631R8>`__","LWG","Math Constants","Cologne","|Complete|","11.0"
"`P0645R10 <https://wg21.link/P0645R10>`__","LWG","Text Formatting","Cologne","|Complete| [#note-P0645]_","14.0"
"`P0660R10 <https://wg21.link/P0660R10>`__","LWG","Stop Token and Joining Thread, Rev 10","Cologne","",""
"`P0784R7 <https://wg21.link/P0784R7>`__","CWG","More constexpr containers","Cologne","|Complete|","12.0"
"`P0980R1 <https://wg21.link/P0980R1>`__","LWG","Making std::string constexpr","Cologne","",""
"`P1004R2 <https://wg21.link/P1004R2>`__","LWG","Making std::vector constexpr","Cologne","",""
"`P1035R7 <https://wg21.link/P1035R7>`__","LWG","Input Range Adaptors","Cologne","",""
"`P1065R2 <https://wg21.link/P1065R2>`__","LWG","Constexpr INVOKE","Cologne","|Complete|","12.0"
"`P1135R6 <https://wg21.link/P1135R6>`__","LWG","The C++20 Synchronization Library","Cologne","|Complete|","11.0"
"`P1207R4 <https://wg21.link/P1207R4>`__","LWG","Movability of Single-pass Iterators","Cologne","",""
"`P1208R6 <https://wg21.link/P1208R6>`__","LWG","Adopt source_location for C++20","Cologne","",""
"`P1355R2 <https://wg21.link/P1355R2>`__","LWG","Exposing a narrow contract for ceil2","Cologne","|Complete|","9.0"
"`P1361R2 <https://wg21.link/P1361R2>`__","LWG","Integration of chrono with text formatting","Cologne","",""
"`P1423R3 <https://wg21.link/P1423R3>`__","LWG","char8_t backward compatibility remediation","Cologne","|In Progress|",""
"`P1424R1 <https://wg21.link/P1424R1>`__","LWG","'constexpr' feature macro concerns","Cologne","Superseded by `P1902 <https://wg21.link/P1902>`__",""
"`P1466R3 <https://wg21.link/P1466R3>`__","LWG","Miscellaneous minor fixes for chrono","Cologne","",""
"`P1474R1 <https://wg21.link/P1474R1>`__","LWG","Helpful pointers for ContiguousIterator","Cologne","",""
"`P1502R1 <https://wg21.link/P1502R1>`__","LWG","Standard library header units for C++20","Cologne","",""
"`P1522R1 <https://wg21.link/P1522R1>`__","LWG","Iterator Difference Type and Integer Overflow","Cologne","",""
"`P1523R1 <https://wg21.link/P1523R1>`__","LWG","Views and Size Types","Cologne","",""
"`P1612R1 <https://wg21.link/P1612R1>`__","LWG","Relocate Endian's Specification","Cologne","|Complete|","10.0"
"`P1614R2 <https://wg21.link/P1614R2>`__","LWG","The Mothership has Landed","Cologne","|In Progress|",""
"`P1638R1 <https://wg21.link/P1638R1>`__","LWG","basic_istream_view::iterator should not be copyable","Cologne","",""
"`P1643R1 <https://wg21.link/P1643R1>`__","LWG","Add wait/notify to atomic_ref","Cologne","",""
"`P1644R0 <https://wg21.link/P1644R0>`__","LWG","Add wait/notify to atomic<shared_ptr>","Cologne","",""
"`P1650R0 <https://wg21.link/P1650R0>`__","LWG","Output std::chrono::days with 'd' suffix","Cologne","",""
"`P1651R0 <https://wg21.link/P1651R0>`__","LWG","bind_front should not unwrap reference_wrapper","Cologne","|Complete|","13.0"
"`P1652R1 <https://wg21.link/P1652R1>`__","LWG","Printf corner cases in std::format","Cologne","|Complete|","14.0"
"`P1661R1 <https://wg21.link/P1661R1>`__","LWG","Remove dedicated precalculated hash lookup interface","Cologne","|Nothing To Do|",""
"`P1754R1 <https://wg21.link/P1754R1>`__","LWG","Rename concepts to standard_case for C++20, while we still can","Cologne","|In Progress|",""
"`P0325 <https://wg21.link/P0325>`__","LWG","to_array from LFTS with updates","Cologne","|Complete|","10.0"
"`P0408 <https://wg21.link/P0408>`__","LWG","Efficient Access to basic_stringbuf's Buffer","Cologne","",""
"`P0466 <https://wg21.link/P0466>`__","LWG","Layout-compatibility and Pointer-interconvertibility Traits","Cologne","",""
"`P0553 <https://wg21.link/P0553>`__","LWG","Bit operations","Cologne","|Complete|","9.0"
"`P0631 <https://wg21.link/P0631>`__","LWG","Math Constants","Cologne","|Complete|","11.0"
"`P0645 <https://wg21.link/P0645>`__","LWG","Text Formatting","Cologne","|In Progress|",""
"`P0660 <https://wg21.link/P0660>`__","LWG","Stop Token and Joining Thread, Rev 10","Cologne","",""
"`P0784 <https://wg21.link/P0784>`__","CWG","More constexpr containers","Cologne","|Complete|","12.0"
"`P0980 <https://wg21.link/P0980>`__","LWG","Making std::string constexpr","Cologne","",""
"`P1004 <https://wg21.link/P1004>`__","LWG","Making std::vector constexpr","Cologne","",""
"`P1035 <https://wg21.link/P1035>`__","LWG","Input Range Adaptors","Cologne","",""
"`P1065 <https://wg21.link/P1065>`__","LWG","Constexpr INVOKE","Cologne","|Complete|","12.0"
"`P1135 <https://wg21.link/P1135>`__","LWG","The C++20 Synchronization Library","Cologne","|Complete|","11.0"
"`P1207 <https://wg21.link/P1207>`__","LWG","Movability of Single-pass Iterators","Cologne","",""
"`P1208 <https://wg21.link/P1208>`__","LWG","Adopt source_location for C++20","Cologne","",""
"`P1355 <https://wg21.link/P1355>`__","LWG","Exposing a narrow contract for ceil2","Cologne","|Complete|","9.0"
"`P1361 <https://wg21.link/P1361>`__","LWG","Integration of chrono with text formatting","Cologne","",""
"`P1423 <https://wg21.link/P1423>`__","LWG","char8_t backward compatibility remediation","Cologne","|In Progress|",""
"`P1424 <https://wg21.link/P1424>`__","LWG","'constexpr' feature macro concerns","Cologne","Superseded by `P1902 <https://wg21.link/P1902>`__",""
"`P1466 <https://wg21.link/P1466>`__","LWG","Miscellaneous minor fixes for chrono","Cologne","",""
"`P1474 <https://wg21.link/P1474>`__","LWG","Helpful pointers for ContiguousIterator","Cologne","",""
"`P1502 <https://wg21.link/P1502>`__","LWG","Standard library header units for C++20","Cologne","",""
"`P1522 <https://wg21.link/P1522>`__","LWG","Iterator Difference Type and Integer Overflow","Cologne","",""
"`P1523 <https://wg21.link/P1523>`__","LWG","Views and Size Types","Cologne","",""
"`P1612 <https://wg21.link/P1612>`__","LWG","Relocate Endian's Specification","Cologne","|Complete|","10.0"
"`P1614 <https://wg21.link/P1614>`__","LWG","The Mothership has Landed","Cologne","|In Progress|",""
"`P1638 <https://wg21.link/P1638>`__","LWG","basic_istream_view::iterator should not be copyable","Cologne","",""
"`P1643 <https://wg21.link/P1643>`__","LWG","Add wait/notify to atomic_ref","Cologne","",""
"`P1644 <https://wg21.link/P1644>`__","LWG","Add wait/notify to atomic<shared_ptr>","Cologne","",""
"`P1650 <https://wg21.link/P1650>`__","LWG","Output std::chrono::days with 'd' suffix","Cologne","",""
"`P1651 <https://wg21.link/P1651>`__","LWG","bind_front should not unwrap reference_wrapper","Cologne","|Complete|","13.0"
"`P1652 <https://wg21.link/P1652>`__","LWG","Printf corner cases in std::format","Cologne","",""
"`P1661 <https://wg21.link/P1661>`__","LWG","Remove dedicated precalculated hash lookup interface","Cologne","|Nothing To Do|",""
"`P1754 <https://wg21.link/P1754>`__","LWG","Rename concepts to standard_case for C++20, while we still can","Cologne","|In Progress|",""
"","","","","",""
"`P0883R2 <https://wg21.link/P0883R2>`__","LWG","Fixing Atomic Initialization","Belfast","|Complete| [#note-P0883]_","14.0"
"`P1391R4 <https://wg21.link/P1391R4>`__","LWG","Range constructor for std::string_view","Belfast","|Complete|","14.0"
"`P1394R4 <https://wg21.link/P1394R4>`__","LWG","Range constructor for std::span","Belfast","|Complete|","14.0"
"`P1456R1 <https://wg21.link/P1456R1>`__","LWG","Move-only views","Belfast","* *",""
"`P1622R3 <https://wg21.link/P1622R3>`__","LWG","Mandating the Standard Library: Clause 32 - Thread support library","Belfast","* *",""
"`P1645R1 <https://wg21.link/P1645R1>`__","LWG","constexpr for numeric algorithms","Belfast","|Complete|","12.0"
"`P1686R2 <https://wg21.link/P1686R2>`__","LWG","Mandating the Standard Library: Clause 27 - Time library","Belfast","* *",""
"`P1690R1 <https://wg21.link/P1690R1>`__","LWG","Refinement Proposal for P0919 Heterogeneous lookup for unordered containers","Belfast","|Complete|","12.0"
"`P1716R3 <https://wg21.link/P1716R3>`__","LWG","ranges compare algorithm are over-constrained","Belfast","* *",""
"`P1718R2 <https://wg21.link/P1718R2>`__","LWG","Mandating the Standard Library: Clause 25 - Algorithms library","Belfast","* *",""
"`P1719R2 <https://wg21.link/P1719R2>`__","LWG","Mandating the Standard Library: Clause 26 - Numerics library","Belfast","* *",""
"`P1720R2 <https://wg21.link/P1720R2>`__","LWG","Mandating the Standard Library: Clause 28 - Localization library","Belfast","* *",""
"`P1721R2 <https://wg21.link/P1721R2>`__","LWG","Mandating the Standard Library: Clause 29 - Input/Output library","Belfast","* *",""
"`P1722R2 <https://wg21.link/P1722R2>`__","LWG","Mandating the Standard Library: Clause 30 - Regular Expression library","Belfast","* *",""
"`P1723R2 <https://wg21.link/P1723R2>`__","LWG","Mandating the Standard Library: Clause 31 - Atomics library","Belfast","* *",""
"`P1855R0 <https://wg21.link/P1855R0>`__","LWG","Make ``<compare>``\ freestanding","Belfast","* *",""
"`P1862R1 <https://wg21.link/P1862R1>`__","LWG","Ranges adaptors for non-copyable iterators","Belfast","* *",""
"`P1865R1 <https://wg21.link/P1865R1>`__","LWG","Add max() to latch and barrier","Belfast","|Complete|","11.0"
"`P1869R1 <https://wg21.link/P1869R1>`__","LWG","Rename 'condition_variable_any' interruptible wait methods","Belfast","* *",""
"`P1870R1 <https://wg21.link/P1870R1>`__","LWG","forwarding-range is too subtle","Belfast","|In Progress|",""
"`P1871R1 <https://wg21.link/P1871R1>`__","LWG","Should concepts be enabled or disabled?","Belfast","|Complete|","14.0"
"`P1872R0 <https://wg21.link/P1872R0>`__","LWG","span should have size_type, not index_type","Belfast","|Complete|","10.0"
"`P1878R1 <https://wg21.link/P1878R1>`__","LWG","Constraining Readable Types","Belfast","* *",""
"`P1892R1 <https://wg21.link/P1892R1>`__","LWG","Extended locale-specific presentation specifiers for std::format","Belfast","|Complete|","14.0"
"`P1902R1 <https://wg21.link/P1902R1>`__","LWG","Missing feature-test macros 2018-2019","Belfast","* *",""
"`P1959R0 <https://wg21.link/P1959R0>`__","LWG","Remove std::weak_equality and std::strong_equality","Belfast","* *",""
"`P1960R0 <https://wg21.link/P1960R0>`__","LWG","NB Comment Changes Reviewed by SG1","Belfast","* *",""
"`P1961R0 <https://wg21.link/P1961R0>`__","LWG","Harmonizing the definitions of total order for pointers","Belfast","* *",""
"`P1965R0 <https://wg21.link/P1965R0>`__","LWG","Blanket Wording for Specifying ""Hidden Friends""","Belfast","* *",""
"`P0883 <https://wg21.link/P0883>`__","LWG","Fixing Atomic Initialization","Belfast","|Complete| [#note-P0883]_","13.0"
"`P1391 <https://wg21.link/P1391>`__","LWG","Range constructor for std::string_view","Belfast","* *",""
"`P1394 <https://wg21.link/P1394>`__","LWG","Range constructor for std::span","Belfast","* *",""
"`P1456 <https://wg21.link/P1456>`__","LWG","Move-only views","Belfast","* *",""
"`P1622 <https://wg21.link/P1622>`__","LWG","Mandating the Standard Library: Clause 32 - Thread support library","Belfast","* *",""
"`P1645 <https://wg21.link/P1645>`__","LWG","constexpr for numeric algorithms","Belfast","|Complete|","12.0"
"`P1664 <https://wg21.link/P1664>`__","LWG","reconstructible_range - a concept for putting ranges back together","Belfast","* *",""
"`P1686 <https://wg21.link/P1686>`__","LWG","Mandating the Standard Library: Clause 27 - Time library","Belfast","* *",""
"`P1690 <https://wg21.link/P1690>`__","LWG","Refinement Proposal for P0919 Heterogeneous lookup for unordered containers","Belfast","|Complete|","12.0"
"`P1716 <https://wg21.link/P1716>`__","LWG","ranges compare algorithm are over-constrained","Belfast","* *",""
"`P1718 <https://wg21.link/P1718>`__","LWG","Mandating the Standard Library: Clause 25 - Algorithms library","Belfast","* *",""
"`P1719 <https://wg21.link/P1719>`__","LWG","Mandating the Standard Library: Clause 26 - Numerics library","Belfast","* *",""
"`P1720 <https://wg21.link/P1720>`__","LWG","Mandating the Standard Library: Clause 28 - Localization library","Belfast","* *",""
"`P1721 <https://wg21.link/P1721>`__","LWG","Mandating the Standard Library: Clause 29 - Input/Output library","Belfast","* *",""
"`P1722 <https://wg21.link/P1722>`__","LWG","Mandating the Standard Library: Clause 30 - Regular Expression library","Belfast","* *",""
"`P1723 <https://wg21.link/P1723>`__","LWG","Mandating the Standard Library: Clause 31 - Atomics library","Belfast","* *",""
"`P1855 <https://wg21.link/P1855>`__","LWG","Make ``<compare>``\ freestanding","Belfast","* *",""
"`P1862 <https://wg21.link/P1862>`__","LWG","Ranges adaptors for non-copyable iterators","Belfast","* *",""
"`P1865 <https://wg21.link/P1865>`__","LWG","Add max() to latch and barrier","Belfast","|Complete|","11.0"
"`P1869 <https://wg21.link/P1869>`__","LWG","Rename 'condition_variable_any' interruptible wait methods","Belfast","* *",""
"`P1870 <https://wg21.link/P1870>`__","LWG","forwarding-range is too subtle","Belfast","|In Progress|",""
"`P1871 <https://wg21.link/P1871>`__","LWG","Should concepts be enabled or disabled?","Belfast","* *",""
"`P1872 <https://wg21.link/P1872>`__","LWG","span should have size_type, not index_type","Belfast","|Complete|","10.0"
"`P1878 <https://wg21.link/P1878>`__","LWG","Constraining Readable Types","Belfast","* *",""
"`P1892 <https://wg21.link/P1892>`__","LWG","Extended locale-specific presentation specifiers for std::format","Belfast","* *",""
"`P1902 <https://wg21.link/P1902>`__","LWG","Missing feature-test macros 2018-2019","Belfast","* *",""
"`P1959 <https://wg21.link/P1959>`__","LWG","Remove std::weak_equality and std::strong_equality","Belfast","* *",""
"`P1960 <https://wg21.link/P1960>`__","LWG","NB Comment Changes Reviewed by SG1","Belfast","* *",""
"`P1961 <https://wg21.link/P1961>`__","LWG","Harmonizing the definitions of total order for pointers","Belfast","* *",""
"`P1965 <https://wg21.link/P1965>`__","LWG","Blanket Wording for Specifying ""Hidden Friends""","Belfast","* *",""
"","","","","",""
"`P0586R2 <https://wg21.link/P0586R2>`__","LWG","Safe integral comparisons","Prague","|Complete|","13.0"
"`P0593R6 <https://wg21.link/P0593R6>`__","CWG","Implicit creation of objects for low-level object manipulation","Prague","* *",""
"`P1115R3 <https://wg21.link/P1115R3>`__","LWG","Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if","Prague","|Complete|","11.0"
"`P1243R4 <https://wg21.link/P1243R4>`__","LWG","Rangify New Algorithms","Prague","* *",""
"`P1460R1 <https://wg21.link/P1460R1>`__","LWG","Mandating the Standard Library: Clause 20 - Utilities library","Prague","* *",""
"`P1739R4 <https://wg21.link/P1739R4>`__","LWG","Avoid template bloat for safe_ranges in combination with ""subrange-y"" view adaptors","Prague","* *",""
"`P1831R1 <https://wg21.link/P1831R1>`__","LWG","Deprecating volatile: library","Prague","* *",""
"`P1868R2 <https://wg21.link/P1868R2>`__","LWG","width: clarifying units of width and precision in std::format","Prague","|Complete|","14.0"
"`P1908R1 <https://wg21.link/P1908R1>`__","CWG","Reserving Attribute Namespaces for Future Use","Prague","* *",""
"`P1937R2 <https://wg21.link/P1937R2>`__","CWG","Fixing inconsistencies between constexpr and consteval functions","Prague","* *",""
"`P1956R1 <https://wg21.link/P1956R1>`__","LWG","On the names of low-level bit manipulation functions","Prague","|Complete|","12.0"
"`P1957R2 <https://wg21.link/P1957R2>`__","CWG","Converting from ``T*``\ to bool should be considered narrowing (re: US 212)","Prague","* *",""
"`P1963R0 <https://wg21.link/P1963R0>`__","LWG","Fixing US 313","Prague","* *",""
"`P1964R2 <https://wg21.link/P1964R2>`__","LWG","Wording for boolean-testable","Prague","|Complete|","13.0"
"`P1970R2 <https://wg21.link/P1970R2>`__","LWG","Consistency for size() functions: Add ranges::ssize","Prague","* *",""
"`P1973R1 <https://wg21.link/P1973R1>`__","LWG","Rename ""_default_init"" Functions, Rev1","Prague","* *",""
"`P1976R2 <https://wg21.link/P1976R2>`__","LWG","Fixed-size span construction from dynamic range","Prague","|Complete|","11.0"
"`P1981R0 <https://wg21.link/P1981R0>`__","LWG","Rename leap to leap_second","Prague","* *",""
"`P1982R0 <https://wg21.link/P1982R0>`__","LWG","Rename link to time_zone_link","Prague","* *",""
"`P1983R0 <https://wg21.link/P1983R0>`__","LWG","Wording for GB301, US296, US292, US291, and US283","Prague","* *",""
"`P1994R1 <https://wg21.link/P1994R1>`__","LWG","elements_view needs its own sentinel","Prague","* *",""
"`P2002R1 <https://wg21.link/P2002R1>`__","CWG","Defaulted comparison specification cleanups","Prague","* *",""
"`P2045R1 <https://wg21.link/P2045R1>`__","LWG","Missing Mandates for the standard library","Prague","* *",""
"`P2085R0 <https://wg21.link/P2085R0>`__","CWG","Consistent defaulted comparisons","Prague","* *",""
"`P2091R0 <https://wg21.link/P2091R0>`__","LWG","Issues with range access CPOs","Prague","* *",""
"`P2101R0 <https://wg21.link/P2101R0>`__","LWG","'Models' subsumes 'satisfies' (Wording for US298 and US300)","Prague","* *",""
"`P2102R0 <https://wg21.link/P2102R0>`__","LWG","Make 'implicit expression variations' more explicit (Wording for US185)","Prague","* *",""
"`P2106R0 <https://wg21.link/P2106R0>`__","LWG","Alternative wording for GB315 and GB316","Prague","* *",""
"`P2116R0 <https://wg21.link/P2116R0>`__","LWG","Remove tuple-like protocol support from fixed-extent span","Prague","|Complete|","11.0"
"","","","","",""
"`P2231R1 <https://wg21.link/P2231R1>`__","LWG","Missing constexpr in std::optional and std::variant","June 2021","|In progress|","13.0"
"`P2325R3 <https://wg21.link/P2325R3>`__","LWG","Views should not be required to be default constructible","June 2021","|In progress|",""
"`P0586 <https://wg21.link/P0586>`__","LWG","Safe integral comparisons","Prague","|Complete|","13.0"
"`P0593 <https://wg21.link/P0593>`__","CWG","Implicit creation of objects for low-level object manipulation","Prague","* *",""
"`P1115 <https://wg21.link/P1115>`__","LWG","Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if","Prague","|Complete|","11.0"
"`P1243 <https://wg21.link/P1243>`__","LWG","Rangify New Algorithms","Prague","* *",""
"`P1460 <https://wg21.link/P1460>`__","LWG","Mandating the Standard Library: Clause 20 - Utilities library","Prague","* *",""
"`P1739 <https://wg21.link/P1739>`__","LWG","Avoid template bloat for safe_ranges in combination with ""subrange-y"" view adaptors","Prague","* *",""
"`P1831 <https://wg21.link/P1831>`__","LWG","Deprecating volatile: library","Prague","* *",""
"`P1868 <https://wg21.link/P1868>`__","LWG","width: clarifying units of width and precision in std::format","Prague","* *",""
"`P1908 <https://wg21.link/P1908>`__","CWG","Reserving Attribute Namespaces for Future Use","Prague","* *",""
"`P1937 <https://wg21.link/P1937>`__","CWG","Fixing inconsistencies between constexpr and consteval functions","Prague","* *",""
"`P1956 <https://wg21.link/P1956>`__","LWG","On the names of low-level bit manipulation functions","Prague","|Complete|","12.0"
"`P1957 <https://wg21.link/P1957>`__","CWG","Converting from ``T*``\ to bool should be considered narrowing (re: US 212)","Prague","* *",""
"`P1963 <https://wg21.link/P1963>`__","LWG","Fixing US 313","Prague","* *",""
"`P1964 <https://wg21.link/P1964>`__","LWG","Wording for boolean-testable","Prague","|Complete|","13.0"
"`P1970 <https://wg21.link/P1970>`__","LWG","Consistency for size() functions: Add ranges::ssize","Prague","* *",""
"`P1973 <https://wg21.link/P1973>`__","LWG","Rename ""_default_init"" Functions, Rev1","Prague","* *",""
"`P1976 <https://wg21.link/P1976>`__","LWG","Fixed-size span construction from dynamic range","Prague","|Complete|","11.0"
"`P1981 <https://wg21.link/P1981>`__","LWG","Rename leap to leap_second","Prague","* *",""
"`P1982 <https://wg21.link/P1982>`__","LWG","Rename link to time_zone_link","Prague","* *",""
"`P1983 <https://wg21.link/P1983>`__","LWG","Wording for GB301, US296, US292, US291, and US283","Prague","* *",""
"`P1994 <https://wg21.link/P1994>`__","LWG","elements_view needs its own sentinel","Prague","* *",""
"`P2002 <https://wg21.link/P2002>`__","CWG","Defaulted comparison specification cleanups","Prague","* *",""
"`P2045 <https://wg21.link/P2045>`__","LWG","Missing Mandates for the standard library","Prague","* *",""
"`P2085 <https://wg21.link/P2085>`__","CWG","Consistent defaulted comparisons","Prague","* *",""
"`P2091 <https://wg21.link/P2091>`__","LWG","Issues with range access CPOs","Prague","* *",""
"`P2101 <https://wg21.link/P2101>`__","LWG","'Models' subsumes 'satisfies' (Wording for US298 and US300)","Prague","* *",""
"`P2102 <https://wg21.link/P2102>`__","LWG","Make 'implicit expression variations' more explicit (Wording for US185)","Prague","* *",""
"`P2106 <https://wg21.link/P2106>`__","LWG","Alternative wording for GB315 and GB316","Prague","* *",""
"`P2116 <https://wg21.link/P2116>`__","LWG","Remove tuple-like protocol support from fixed-extent span","Prague","|Complete|","11.0"
"`P2231 <https://wg21.link/P2231>`__","LWG","Missing constexpr in std::optional and std::variant","February 2021","|In progress|","13.0"
"`P2325 <https://wg21.link/P2325>`__","LWG","Views should not be required to be default constructible","June 2021","|In progress|",""
"`P2210R2 <https://wg21.link/P2210R2>`__","LWG",Superior String Splitting,"June 2021","",""
"`P2216R3 <https://wg21.link/P2216R3>`__","LWG",std::format improvements,"June 2021","|Partial|",""
"`P2281R1 <https://wg21.link/P2281R1>`__","LWG",Clarifying range adaptor objects,"June 2021","|Complete|","14.0"
"`P2216R3 <https://wg21.link/P2216R3>`__","LWG",std::format improvements,"June 2021","",""
"`P2281R1 <https://wg21.link/P2281R1>`__","LWG",Clarifying range adaptor objects,"June 2021","",""
"`P2328R1 <https://wg21.link/P2328R1>`__","LWG",join_view should join all views of ranges,"June 2021","",""
"`P2367R0 <https://wg21.link/P2367R0>`__","LWG",Remove misuses of list-initialization from Clause 24,"June 2021","",""
"","","","","",""
"`P2372R3 <https://wg21.link/P2372R3>`__","LWG","Fixing locale handling in chrono formatters","October 2021","",""
"`P2415R2 <https://wg21.link/P2415R2>`__","LWG","What is a ``view``","October 2021","|Complete|","14.0"
"`P2418R2 <https://wg21.link/P2418R2>`__","LWG","Add support for ``std::generator``-like types to ``std::format``","October 2021","",""
"`P2432R1 <https://wg21.link/P2432R1>`__","LWG","Fix ``istream_view``","October 2021","",""
"`P2367R0 <https://wg21.link/P2367R0>`__","LWG",Remove misuses of list-initialization from Clause 24,"June 2021","",""
1 Paper # Group Paper Name Meeting Status First released version
22 `P0753R2 <https://wg21.link/P0753R2>`__ LWG Manipulators for C++ Synchronized Buffered Ostream Jacksonville
23 `P0754R2 <https://wg21.link/P0754R2>`__ LWG <version> Jacksonville |Complete| 7.0
24 `P0809R0 <https://wg21.link/P0809R0>`__ LWG Comparing Unordered Containers Jacksonville |Nothing To Do|
25 `P0858R0 <https://wg21.link/P0858R0>`__ LWG Constexpr iterator requirements Jacksonville |Complete| 12.0
26 `P0905R1 <https://wg21.link/P0905R1>`__ CWG Symmetry for spaceship Jacksonville
27 `P0966R1 <https://wg21.link/P0966R1>`__ LWG ``string::reserve``\ Should Not Shrink Jacksonville |Complete| [#note-P0966]_ 12.0
28
29 `P0019R8 <https://wg21.link/P0019R8>`__ LWG Atomic Ref Rapperswil
30 `P0458R2 <https://wg21.link/P0458R2>`__ LWG Checking for Existence of an Element in Associative Containers Rapperswil |Complete| 13.0
31 `P0475R1 <https://wg21.link/P0475R1>`__ LWG LWG 2511: guaranteed copy elision for piecewise construction Rapperswil |Complete|
32 `P0476R2 <https://wg21.link/P0476R2>`__ LWG Bit-casting object representations Rapperswil |Complete| 14.0
33 `P0528R3 <https://wg21.link/P0528R3>`__ CWG The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange Rapperswil
34 `P0542R5 <https://wg21.link/P0542R5>`__ CWG Support for contract based programming in C++ Rapperswil *Removed in Cologne* n/a
35 `P0556R3 <https://wg21.link/P0556R3>`__ LWG Integral power-of-2 operations Rapperswil |Complete| 9.0
98 `P1463R1 <https://wg21.link/P1463R1>`__ LWG Mandating the Standard Library: Clause 21 - Containers library Kona
99 `P1464R1 <https://wg21.link/P1464R1>`__ LWG Mandating the Standard Library: Clause 22 - Iterators library Kona |Complete| 9.0
100
101 `P0325R4 <https://wg21.link/P0325R4>`__ `P0325 <https://wg21.link/P0325>`__ LWG to_array from LFTS with updates Cologne |Complete| 10.0
102 `P0408R7 <https://wg21.link/P0408R7>`__ `P0408 <https://wg21.link/P0408>`__ LWG Efficient Access to basic_stringbuf's Buffer Cologne
103 `P0466R5 <https://wg21.link/P0466R5>`__ `P0466 <https://wg21.link/P0466>`__ LWG Layout-compatibility and Pointer-interconvertibility Traits Cologne
104 `P0553R4 <https://wg21.link/P0553R4>`__ `P0553 <https://wg21.link/P0553>`__ LWG Bit operations Cologne |Complete| 9.0
105 `P0631R8 <https://wg21.link/P0631R8>`__ `P0631 <https://wg21.link/P0631>`__ LWG Math Constants Cologne |Complete| 11.0
106 `P0645R10 <https://wg21.link/P0645R10>`__ `P0645 <https://wg21.link/P0645>`__ LWG Text Formatting Cologne |Complete| [#note-P0645]_ |In Progress| 14.0
107 `P0660R10 <https://wg21.link/P0660R10>`__ `P0660 <https://wg21.link/P0660>`__ LWG Stop Token and Joining Thread, Rev 10 Cologne
108 `P0784R7 <https://wg21.link/P0784R7>`__ `P0784 <https://wg21.link/P0784>`__ CWG More constexpr containers Cologne |Complete| 12.0
109 `P0980R1 <https://wg21.link/P0980R1>`__ `P0980 <https://wg21.link/P0980>`__ LWG Making std::string constexpr Cologne
110 `P1004R2 <https://wg21.link/P1004R2>`__ `P1004 <https://wg21.link/P1004>`__ LWG Making std::vector constexpr Cologne
111 `P1035R7 <https://wg21.link/P1035R7>`__ `P1035 <https://wg21.link/P1035>`__ LWG Input Range Adaptors Cologne
112 `P1065R2 <https://wg21.link/P1065R2>`__ `P1065 <https://wg21.link/P1065>`__ LWG Constexpr INVOKE Cologne |Complete| 12.0
113 `P1135R6 <https://wg21.link/P1135R6>`__ `P1135 <https://wg21.link/P1135>`__ LWG The C++20 Synchronization Library Cologne |Complete| 11.0
114 `P1207R4 <https://wg21.link/P1207R4>`__ `P1207 <https://wg21.link/P1207>`__ LWG Movability of Single-pass Iterators Cologne
115 `P1208R6 <https://wg21.link/P1208R6>`__ `P1208 <https://wg21.link/P1208>`__ LWG Adopt source_location for C++20 Cologne
116 `P1355R2 <https://wg21.link/P1355R2>`__ `P1355 <https://wg21.link/P1355>`__ LWG Exposing a narrow contract for ceil2 Cologne |Complete| 9.0
117 `P1361R2 <https://wg21.link/P1361R2>`__ `P1361 <https://wg21.link/P1361>`__ LWG Integration of chrono with text formatting Cologne
118 `P1423R3 <https://wg21.link/P1423R3>`__ `P1423 <https://wg21.link/P1423>`__ LWG char8_t backward compatibility remediation Cologne |In Progress|
119 `P1424R1 <https://wg21.link/P1424R1>`__ `P1424 <https://wg21.link/P1424>`__ LWG 'constexpr' feature macro concerns Cologne Superseded by `P1902 <https://wg21.link/P1902>`__
120 `P1466R3 <https://wg21.link/P1466R3>`__ `P1466 <https://wg21.link/P1466>`__ LWG Miscellaneous minor fixes for chrono Cologne
121 `P1474R1 <https://wg21.link/P1474R1>`__ `P1474 <https://wg21.link/P1474>`__ LWG Helpful pointers for ContiguousIterator Cologne
122 `P1502R1 <https://wg21.link/P1502R1>`__ `P1502 <https://wg21.link/P1502>`__ LWG Standard library header units for C++20 Cologne
123 `P1522R1 <https://wg21.link/P1522R1>`__ `P1522 <https://wg21.link/P1522>`__ LWG Iterator Difference Type and Integer Overflow Cologne
124 `P1523R1 <https://wg21.link/P1523R1>`__ `P1523 <https://wg21.link/P1523>`__ LWG Views and Size Types Cologne
125 `P1612R1 <https://wg21.link/P1612R1>`__ `P1612 <https://wg21.link/P1612>`__ LWG Relocate Endian's Specification Cologne |Complete| 10.0
126 `P1614R2 <https://wg21.link/P1614R2>`__ `P1614 <https://wg21.link/P1614>`__ LWG The Mothership has Landed Cologne |In Progress|
127 `P1638R1 <https://wg21.link/P1638R1>`__ `P1638 <https://wg21.link/P1638>`__ LWG basic_istream_view::iterator should not be copyable Cologne
128 `P1643R1 <https://wg21.link/P1643R1>`__ `P1643 <https://wg21.link/P1643>`__ LWG Add wait/notify to atomic_ref Cologne
129 `P1644R0 <https://wg21.link/P1644R0>`__ `P1644 <https://wg21.link/P1644>`__ LWG Add wait/notify to atomic<shared_ptr> Cologne
130 `P1650R0 <https://wg21.link/P1650R0>`__ `P1650 <https://wg21.link/P1650>`__ LWG Output std::chrono::days with 'd' suffix Cologne
131 `P1651R0 <https://wg21.link/P1651R0>`__ `P1651 <https://wg21.link/P1651>`__ LWG bind_front should not unwrap reference_wrapper Cologne |Complete| 13.0
132 `P1652R1 <https://wg21.link/P1652R1>`__ `P1652 <https://wg21.link/P1652>`__ LWG Printf corner cases in std::format Cologne |Complete| 14.0
133 `P1661R1 <https://wg21.link/P1661R1>`__ `P1661 <https://wg21.link/P1661>`__ LWG Remove dedicated precalculated hash lookup interface Cologne |Nothing To Do|
134 `P1754R1 <https://wg21.link/P1754R1>`__ `P1754 <https://wg21.link/P1754>`__ LWG Rename concepts to standard_case for C++20, while we still can Cologne |In Progress|
135
136 `P0883R2 <https://wg21.link/P0883R2>`__ `P0883 <https://wg21.link/P0883>`__ LWG Fixing Atomic Initialization Belfast |Complete| [#note-P0883]_ 14.0 13.0
137 `P1391R4 <https://wg21.link/P1391R4>`__ `P1391 <https://wg21.link/P1391>`__ LWG Range constructor for std::string_view Belfast |Complete| * * 14.0
138 `P1394R4 <https://wg21.link/P1394R4>`__ `P1394 <https://wg21.link/P1394>`__ LWG Range constructor for std::span Belfast |Complete| * * 14.0
139 `P1456R1 <https://wg21.link/P1456R1>`__ `P1456 <https://wg21.link/P1456>`__ LWG Move-only views Belfast * *
140 `P1622R3 <https://wg21.link/P1622R3>`__ `P1622 <https://wg21.link/P1622>`__ LWG Mandating the Standard Library: Clause 32 - Thread support library Belfast * *
141 `P1645R1 <https://wg21.link/P1645R1>`__ `P1645 <https://wg21.link/P1645>`__ LWG constexpr for numeric algorithms Belfast |Complete| 12.0
142 `P1686R2 <https://wg21.link/P1686R2>`__ `P1664 <https://wg21.link/P1664>`__ LWG Mandating the Standard Library: Clause 27 - Time library reconstructible_range - a concept for putting ranges back together Belfast * *
143 `P1690R1 <https://wg21.link/P1690R1>`__ `P1686 <https://wg21.link/P1686>`__ LWG Refinement Proposal for P0919 Heterogeneous lookup for unordered containers Mandating the Standard Library: Clause 27 - Time library Belfast |Complete| * * 12.0
144 `P1716R3 <https://wg21.link/P1716R3>`__ `P1690 <https://wg21.link/P1690>`__ LWG ranges compare algorithm are over-constrained Refinement Proposal for P0919 Heterogeneous lookup for unordered containers Belfast * * |Complete| 12.0
145 `P1718R2 <https://wg21.link/P1718R2>`__ `P1716 <https://wg21.link/P1716>`__ LWG Mandating the Standard Library: Clause 25 - Algorithms library ranges compare algorithm are over-constrained Belfast * *
146 `P1719R2 <https://wg21.link/P1719R2>`__ `P1718 <https://wg21.link/P1718>`__ LWG Mandating the Standard Library: Clause 26 - Numerics library Mandating the Standard Library: Clause 25 - Algorithms library Belfast * *
147 `P1720R2 <https://wg21.link/P1720R2>`__ `P1719 <https://wg21.link/P1719>`__ LWG Mandating the Standard Library: Clause 28 - Localization library Mandating the Standard Library: Clause 26 - Numerics library Belfast * *
148 `P1721R2 <https://wg21.link/P1721R2>`__ `P1720 <https://wg21.link/P1720>`__ LWG Mandating the Standard Library: Clause 29 - Input/Output library Mandating the Standard Library: Clause 28 - Localization library Belfast * *
149 `P1722R2 <https://wg21.link/P1722R2>`__ `P1721 <https://wg21.link/P1721>`__ LWG Mandating the Standard Library: Clause 30 - Regular Expression library Mandating the Standard Library: Clause 29 - Input/Output library Belfast * *
150 `P1723R2 <https://wg21.link/P1723R2>`__ `P1722 <https://wg21.link/P1722>`__ LWG Mandating the Standard Library: Clause 31 - Atomics library Mandating the Standard Library: Clause 30 - Regular Expression library Belfast * *
151 `P1855R0 <https://wg21.link/P1855R0>`__ `P1723 <https://wg21.link/P1723>`__ LWG Make ``<compare>``\ freestanding Mandating the Standard Library: Clause 31 - Atomics library Belfast * *
152 `P1862R1 <https://wg21.link/P1862R1>`__ `P1855 <https://wg21.link/P1855>`__ LWG Ranges adaptors for non-copyable iterators Make ``<compare>``\ freestanding Belfast * *
153 `P1865R1 <https://wg21.link/P1865R1>`__ `P1862 <https://wg21.link/P1862>`__ LWG Add max() to latch and barrier Ranges adaptors for non-copyable iterators Belfast |Complete| * * 11.0
154 `P1869R1 <https://wg21.link/P1869R1>`__ `P1865 <https://wg21.link/P1865>`__ LWG Rename 'condition_variable_any' interruptible wait methods Add max() to latch and barrier Belfast * * |Complete| 11.0
155 `P1870R1 <https://wg21.link/P1870R1>`__ `P1869 <https://wg21.link/P1869>`__ LWG forwarding-range is too subtle Rename 'condition_variable_any' interruptible wait methods Belfast |In Progress| * *
156 `P1871R1 <https://wg21.link/P1871R1>`__ `P1870 <https://wg21.link/P1870>`__ LWG Should concepts be enabled or disabled? forwarding-range is too subtle Belfast |Complete| |In Progress| 14.0
157 `P1872R0 <https://wg21.link/P1872R0>`__ `P1871 <https://wg21.link/P1871>`__ LWG span should have size_type, not index_type Should concepts be enabled or disabled? Belfast |Complete| * * 10.0
158 `P1878R1 <https://wg21.link/P1878R1>`__ `P1872 <https://wg21.link/P1872>`__ LWG Constraining Readable Types span should have size_type, not index_type Belfast * * |Complete| 10.0
159 `P1892R1 <https://wg21.link/P1892R1>`__ `P1878 <https://wg21.link/P1878>`__ LWG Extended locale-specific presentation specifiers for std::format Constraining Readable Types Belfast |Complete| * * 14.0
160 `P1902R1 <https://wg21.link/P1902R1>`__ `P1892 <https://wg21.link/P1892>`__ LWG Missing feature-test macros 2018-2019 Extended locale-specific presentation specifiers for std::format Belfast * *
161 `P1959R0 <https://wg21.link/P1959R0>`__ `P1902 <https://wg21.link/P1902>`__ LWG Remove std::weak_equality and std::strong_equality Missing feature-test macros 2018-2019 Belfast * *
162 `P1960R0 <https://wg21.link/P1960R0>`__ `P1959 <https://wg21.link/P1959>`__ LWG NB Comment Changes Reviewed by SG1 Remove std::weak_equality and std::strong_equality Belfast * *
163 `P1961R0 <https://wg21.link/P1961R0>`__ `P1960 <https://wg21.link/P1960>`__ LWG Harmonizing the definitions of total order for pointers NB Comment Changes Reviewed by SG1 Belfast * *
164 `P1965R0 <https://wg21.link/P1965R0>`__ `P1961 <https://wg21.link/P1961>`__ LWG Blanket Wording for Specifying "Hidden Friends" Harmonizing the definitions of total order for pointers Belfast * *
165 `P1965 <https://wg21.link/P1965>`__ LWG Blanket Wording for Specifying "Hidden Friends" Belfast * *
166
167 `P0586R2 <https://wg21.link/P0586R2>`__ `P0586 <https://wg21.link/P0586>`__ LWG Safe integral comparisons Prague |Complete| 13.0
168 `P0593R6 <https://wg21.link/P0593R6>`__ `P0593 <https://wg21.link/P0593>`__ CWG Implicit creation of objects for low-level object manipulation Prague * *
169 `P1115R3 <https://wg21.link/P1115R3>`__ `P1115 <https://wg21.link/P1115>`__ LWG Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if Prague |Complete| 11.0
170 `P1243R4 <https://wg21.link/P1243R4>`__ `P1243 <https://wg21.link/P1243>`__ LWG Rangify New Algorithms Prague * *
171 `P1460R1 <https://wg21.link/P1460R1>`__ `P1460 <https://wg21.link/P1460>`__ LWG Mandating the Standard Library: Clause 20 - Utilities library Prague * *
172 `P1739R4 <https://wg21.link/P1739R4>`__ `P1739 <https://wg21.link/P1739>`__ LWG Avoid template bloat for safe_ranges in combination with "subrange-y" view adaptors Prague * *
173 `P1831R1 <https://wg21.link/P1831R1>`__ `P1831 <https://wg21.link/P1831>`__ LWG Deprecating volatile: library Prague * *
174 `P1868R2 <https://wg21.link/P1868R2>`__ `P1868 <https://wg21.link/P1868>`__ LWG width: clarifying units of width and precision in std::format Prague |Complete| * * 14.0
175 `P1908R1 <https://wg21.link/P1908R1>`__ `P1908 <https://wg21.link/P1908>`__ CWG Reserving Attribute Namespaces for Future Use Prague * *
176 `P1937R2 <https://wg21.link/P1937R2>`__ `P1937 <https://wg21.link/P1937>`__ CWG Fixing inconsistencies between constexpr and consteval functions Prague * *
177 `P1956R1 <https://wg21.link/P1956R1>`__ `P1956 <https://wg21.link/P1956>`__ LWG On the names of low-level bit manipulation functions Prague |Complete| 12.0
178 `P1957R2 <https://wg21.link/P1957R2>`__ `P1957 <https://wg21.link/P1957>`__ CWG Converting from ``T*``\ to bool should be considered narrowing (re: US 212) Prague * *
179 `P1963R0 <https://wg21.link/P1963R0>`__ `P1963 <https://wg21.link/P1963>`__ LWG Fixing US 313 Prague * *
180 `P1964R2 <https://wg21.link/P1964R2>`__ `P1964 <https://wg21.link/P1964>`__ LWG Wording for boolean-testable Prague |Complete| 13.0
181 `P1970R2 <https://wg21.link/P1970R2>`__ `P1970 <https://wg21.link/P1970>`__ LWG Consistency for size() functions: Add ranges::ssize Prague * *
182 `P1973R1 <https://wg21.link/P1973R1>`__ `P1973 <https://wg21.link/P1973>`__ LWG Rename "_default_init" Functions, Rev1 Prague * *
183 `P1976R2 <https://wg21.link/P1976R2>`__ `P1976 <https://wg21.link/P1976>`__ LWG Fixed-size span construction from dynamic range Prague |Complete| 11.0
184 `P1981R0 <https://wg21.link/P1981R0>`__ `P1981 <https://wg21.link/P1981>`__ LWG Rename leap to leap_second Prague * *
185 `P1982R0 <https://wg21.link/P1982R0>`__ `P1982 <https://wg21.link/P1982>`__ LWG Rename link to time_zone_link Prague * *
186 `P1983R0 <https://wg21.link/P1983R0>`__ `P1983 <https://wg21.link/P1983>`__ LWG Wording for GB301, US296, US292, US291, and US283 Prague * *
187 `P1994R1 <https://wg21.link/P1994R1>`__ `P1994 <https://wg21.link/P1994>`__ LWG elements_view needs its own sentinel Prague * *
188 `P2002R1 <https://wg21.link/P2002R1>`__ `P2002 <https://wg21.link/P2002>`__ CWG Defaulted comparison specification cleanups Prague * *
189 `P2045R1 <https://wg21.link/P2045R1>`__ `P2045 <https://wg21.link/P2045>`__ LWG Missing Mandates for the standard library Prague * *
190 `P2085R0 <https://wg21.link/P2085R0>`__ `P2085 <https://wg21.link/P2085>`__ CWG Consistent defaulted comparisons Prague * *
191 `P2091R0 <https://wg21.link/P2091R0>`__ `P2091 <https://wg21.link/P2091>`__ LWG Issues with range access CPOs Prague * *
192 `P2101R0 <https://wg21.link/P2101R0>`__ `P2101 <https://wg21.link/P2101>`__ LWG 'Models' subsumes 'satisfies' (Wording for US298 and US300) Prague * *
193 `P2102R0 <https://wg21.link/P2102R0>`__ `P2102 <https://wg21.link/P2102>`__ LWG Make 'implicit expression variations' more explicit (Wording for US185) Prague * *
194 `P2106R0 <https://wg21.link/P2106R0>`__ `P2106 <https://wg21.link/P2106>`__ LWG Alternative wording for GB315 and GB316 Prague * *
195 `P2116R0 <https://wg21.link/P2116R0>`__ `P2116 <https://wg21.link/P2116>`__ LWG Remove tuple-like protocol support from fixed-extent span Prague |Complete| 11.0
196 `P2231 <https://wg21.link/P2231>`__ LWG Missing constexpr in std::optional and std::variant February 2021 |In progress| 13.0
197 `P2231R1 <https://wg21.link/P2231R1>`__ `P2325 <https://wg21.link/P2325>`__ LWG Missing constexpr in std::optional and std::variant Views should not be required to be default constructible June 2021 |In progress| 13.0
`P2325R3 <https://wg21.link/P2325R3>`__ LWG Views should not be required to be default constructible June 2021 |In progress|
198 `P2210R2 <https://wg21.link/P2210R2>`__ LWG Superior String Splitting June 2021
199 `P2216R3 <https://wg21.link/P2216R3>`__ LWG std::format improvements June 2021 |Partial|
200 `P2281R1 <https://wg21.link/P2281R1>`__ LWG Clarifying range adaptor objects June 2021 |Complete| 14.0
201 `P2328R1 <https://wg21.link/P2328R1>`__ LWG join_view should join all views of ranges June 2021
202 `P2367R0 <https://wg21.link/P2367R0>`__ LWG Remove misuses of list-initialization from Clause 24 June 2021
`P2372R3 <https://wg21.link/P2372R3>`__ LWG Fixing locale handling in chrono formatters October 2021
`P2415R2 <https://wg21.link/P2415R2>`__ LWG What is a ``view`` October 2021 |Complete| 14.0
`P2418R2 <https://wg21.link/P2418R2>`__ LWG Add support for ``std::generator``-like types to ``std::format`` October 2021
`P2432R1 <https://wg21.link/P2432R1>`__ LWG Fix ``istream_view`` October 2021

View File

@ -1,48 +1,50 @@
.. _cxx2b-status:
================================
libc++ C++2b Status
================================
.. include:: ../Helpers/Styles.rst
.. contents::
:local:
Overview
================================
In November 2020, the C++ standard committee adopted the first changes to the next version of the C++ standard, known here as "C++2b" (probably to be C++23).
This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx23>`__.
.. attention:: Features in unreleased drafts of the standard are subject to change.
The groups that have contributed papers:
- CWG - Core Language Working group
- LWG - Library working group
- SG1 - Study group #1 (Concurrency working group)
.. note:: "Nothing to do" means that no library changes were needed to implement this change.
.. _paper-status-cxx2b:
Paper Status
====================================
.. csv-table::
:file: Cxx2bPapers.csv
:header-rows: 1
:widths: auto
.. _issues-status-cxx2b:
Library Working Group Issues Status
====================================
.. csv-table::
:file: Cxx2bIssues.csv
:header-rows: 1
:widths: auto
.. _cxx2b-status:
================================
libc++ C++2b Status
================================
.. include:: ../Helpers/Styles.rst
.. contents::
:local:
Overview
================================
In November 2020, the C++ standard committee adopted the first changes to the next version of the C++ standard, known here as "C++2b" (probably to be C++23).
This page shows the status of libc++; the status of clang's support of the language features is `here <https://clang.llvm.org/cxx_status.html#cxx23>`__.
.. attention:: Features in unreleased drafts of the standard are subject to change.
The groups that have contributed papers:
- CWG - Core Language Working group
- LWG - Library working group
- SG1 - Study group #1 (Concurrency working group)
.. note:: "Nothing to do" means that no library changes were needed to implement this change.
.. _paper-status-cxx2b:
Paper Status
====================================
.. csv-table::
:file: Cxx2bPapers.csv
:header-rows: 1
:widths: auto
.. _issues-status-cxx2b:
Library Working Group Issues Status
====================================
.. csv-table::
:file: Cxx2bIssues.csv
:header-rows: 1
:widths: auto
Last Updated: 22-July-2021

View File

@ -1,141 +1,99 @@
"Issue #","Issue Name","Meeting","Status","First released version","Labels"
"`2839 <https://wg21.link/LWG2839>`__","Self-move-assignment of library types, again","November 2020","|Nothing To Do|",""
"Issue #","Issue Name","Meeting","Status","First released version"
"`2839 <https://wg21.link/LWG2839>`__","Self-move-assignment of library types, again","November 2020","",""
"`3117 <https://wg21.link/LWG3117>`__","Missing ``packaged_task`` deduction guides","November 2020","",""
"`3143 <https://wg21.link/LWG3143>`__","``monotonic_buffer_resource`` growth policy is unclear","November 2020","",""
"`3195 <https://wg21.link/LWG3195>`__","What is the stored pointer value of an empty ``weak_ptr``?","November 2020","|Nothing To Do|",""
"`3211 <https://wg21.link/LWG3211>`__","``std::tuple<>`` should be trivially constructible","November 2020","|Complete|","9.0"
"`3236 <https://wg21.link/LWG3236>`__","Random access iterator requirements lack limiting relational operators domain to comparing those from the same range","November 2020","|Nothing To Do|","","|ranges|"
"`3195 <https://wg21.link/LWG3195>`__","What is the stored pointer value of an empty weak_ptr?","November 2020","",""
"`3211 <https://wg21.link/LWG3211>`__","``std::tuple<>`` should be trivially constructible","November 2020","",""
"`3236 <https://wg21.link/LWG3236>`__","Random access iterator requirements lack limiting relational operators domain to comparing those from the same range","November 2020","",""
"`3265 <https://wg21.link/LWG3265>`__","``move_iterator``'s conversions are more broken after P1207","November 2020","Fixed by `LWG3435 <https://wg21.link/LWG3435>`__",""
"`3435 <https://wg21.link/LWG3435>`__","``three_way_comparable_with<reverse_iterator<int*>, reverse_iterator<const int*>>``","November 2020","|Complete|","13.0"
"`3432 <https://wg21.link/LWG3432>`__","Missing requirement for ``comparison_category``","November 2020","","","|spaceship|"
"`3447 <https://wg21.link/LWG3447>`__","Deduction guides for ``take_view`` and ``drop_view`` have different constraints","November 2020","|Complete|","14.0"
"`3450 <https://wg21.link/LWG3450>`__","The const overloads of ``take_while_view::begin/end`` are underconstrained","November 2020","","","|ranges|"
"`3432 <https://wg21.link/LWG3432>`__","Missing requirement for comparison_category","November 2020","",""
"`3447 <https://wg21.link/LWG3447>`__","Deduction guides for ``take_view`` and ``drop_view`` have different constraints","November 2020","",""
"`3450 <https://wg21.link/LWG3450>`__","The const overloads of ``take_while_view::begin/end`` are underconstrained","November 2020","",""
"`3464 <https://wg21.link/LWG3464>`__","``istream::gcount()`` can overflow","November 2020","",""
"`2731 <https://wg21.link/LWG2731>`__","Existence of ``lock_guard<MutexTypes...>::mutex_type`` typedef unclear","November 2020","|Complete|","5.0"
"`2743 <https://wg21.link/LWG2743>`__","P0083R3 ``node_handle`` private members missing ""exposition only"" comment","November 2020","|Nothing To Do|",""
"`2820 <https://wg21.link/LWG2820>`__","Clarify ``<cstdint>`` macros","November 2020","|Nothing To Do|",""
"`2731 <https://wg21.link/LWG2731>`__","Existence of ``lock_guard<MutexTypes...>::mutex_type`` typedef unclear","November 2020","",""
"`2743 <https://wg21.link/LWG2743>`__","P0083R3 ``node_handle`` private members missing ""exposition only"" comment","November 2020","",""
"`2820 <https://wg21.link/LWG2820>`__","Clarify ``<cstdint>`` macros","November 2020","",""
"`3120 <https://wg21.link/LWG3120>`__","Unclear behavior of ``monotonic_buffer_resource::release()``","November 2020","",""
"`3170 <https://wg21.link/LWG3170>`__","``is_always_equal`` added to ``std::allocator`` makes the standard library treat derived types as always equal","November 2020","",""
"`3036 <https://wg21.link/LWG3036>`__","``polymorphic_allocator::destroy`` is extraneous","November 2020","",""
"`3171 <https://wg21.link/LWG3171>`__","LWG2989 breaks ``directory_entry`` stream insertion","November 2020","|Complete|","14.0"
"`3306 <https://wg21.link/LWG3306>`__","``ranges::advance`` violates its preconditions","November 2020","|Complete|","14.0","|ranges|"
"`3403 <https://wg21.link/LWG3403>`__","Domain of ``ranges::ssize(E)`` doesn't ``match ranges::size(E)``","November 2020","","","|ranges|"
"`3404 <https://wg21.link/LWG3404>`__","Finish removing subrange's conversions from pair-like","November 2020","","","|ranges|"
"`3405 <https://wg21.link/LWG3405>`__","``common_view``'s converting constructor is bad, too","November 2020","|Complete|","14.0","|ranges|"
"`3406 <https://wg21.link/LWG3406>`__","``elements_view::begin()`` and ``elements_view::end()`` have incompatible constraints","November 2020","","","|ranges|"
"`3419 <https://wg21.link/LWG3419>`__","[algorithms.requirements]/15 doesn't reserve as many rights as it intends to","November 2020","|Nothing To Do|",""
"`3420 <https://wg21.link/LWG3420>`__","cpp17-iterator should check that the type looks like an iterator first","November 2020","|Complete|","14.0","|ranges|"
"`3421 <https://wg21.link/LWG3421>`__","Imperfect ADL emulation for boolean-testable","November 2020","|Nothing To Do|","","|ranges|"
"`3425 <https://wg21.link/LWG3425>`__","``condition_variable_any`` fails to constrain its Lock parameters","November 2020","|Nothing To Do|",""
"`3426 <https://wg21.link/LWG3426>`__","``operator<=>(const unique_ptr<T, D>&, nullptr_t)`` can't get no satisfaction","November 2020","","","|spaceship|"
"`3427 <https://wg21.link/LWG3427>`__","``operator<=>(const shared_ptr<T>&, nullptr_t)`` definition ill-formed","November 2020","","","|spaceship|"
"`3428 <https://wg21.link/LWG3428>`__","``single_view``'s in place constructor should be explicit","November 2020","|Complete|","14.0","|ranges|"
"`3434 <https://wg21.link/LWG3434>`__","``ios_base`` never reclaims memory for iarray and parray","November 2020","|Nothing To Do|",""
"`3437 <https://wg21.link/LWG3437>`__","``__cpp_lib_polymorphic_allocator`` is in the wrong header","November 2020","|Complete|","14.0"
"`3446 <https://wg21.link/LWG3446>`__","``indirectly_readable_traits`` ambiguity for types with both ``value_type`` and ``element_type``","November 2020","|Complete|","14.0","|ranges|"
"`3448 <https://wg21.link/LWG3448>`__","``transform_view``'s ``sentinel<false>`` not comparable with ``iterator<true>``","November 2020","","","|ranges|"
"`3449 <https://wg21.link/LWG3449>`__","``take_view`` and ``take_while_view``'s ``sentinel<false>`` not comparable with their ``const iterator``","November 2020","","","|ranges|"
"`3453 <https://wg21.link/LWG3453>`__","Generic code cannot call ``ranges::advance(i, s)``","November 2020","|Nothing To Do|","","|ranges|"
"`3171 <https://wg21.link/LWG3171>`__","LWG2989 breaks ``directory_entry`` stream insertion","November 2020","",""
"`3306 <https://wg21.link/LWG3306>`__","``ranges::advance`` violates its preconditions","November 2020","",""
"`3403 <https://wg21.link/LWG3403>`__","Domain of ``ranges::ssize(E)`` doesn't ``match ranges::size(E)``","November 2020","",""
"`3404 <https://wg21.link/LWG3404>`__","Finish removing subrange's conversions from pair-like","November 2020","",""
"`3405 <https://wg21.link/LWG3405>`__","``common_view``'s converting constructor is bad, too","November 2020","",""
"`3406 <https://wg21.link/LWG3406>`__","``elements_view::begin()`` and ``elements_view::end()`` have incompatible constraints","November 2020","",""
"`3419 <https://wg21.link/LWG3419>`__","[algorithms.requirements]/15 doesn't reserve as many rights as it intends to","November 2020","",""
"`3420 <https://wg21.link/LWG3420>`__","cpp17-iterator should check that the type looks like an iterator first","November 2020","",""
"`3421 <https://wg21.link/LWG3421>`__","Imperfect ADL emulation for boolean-testable","November 2020","",""
"`3425 <https://wg21.link/LWG3425>`__","``condition_variable_any`` fails to constrain its Lock parameters","November 2020","",""
"`3426 <https://wg21.link/LWG3426>`__","``operator<=>(const unique_ptr<T, D>&, nullptr_t)`` can't get no satisfaction","November 2020","",""
"`3427 <https://wg21.link/LWG3427>`__","``operator<=>(const shared_ptr<T>&, nullptr_t)`` definition ill-formed","November 2020","",""
"`3428 <https://wg21.link/LWG3428>`__","``single_view``'s in place constructor should be explicit","November 2020","",""
"`3434 <https://wg21.link/LWG3434>`__","``ios_base`` never reclaims memory for iarray and parray","November 2020","",""
"`3437 <https://wg21.link/LWG3437>`__","``__cpp_lib_polymorphic_allocator`` is in the wrong header","November 2020","",""
"`3446 <https://wg21.link/LWG3446>`__","``indirectly_readable_traits`` ambiguity for types with both ``value_type`` and ``element_type``","November 2020","",""
"`3448 <https://wg21.link/LWG3448>`__","``transform_view``'s sentinel<false> not comparable with ``iterator<true>``","November 2020","",""
"`3449 <https://wg21.link/LWG3449>`__","take_view and take_while_view's ``sentinel<false>`` not comparable with their const iterator","November 2020","",""
"`3453 <https://wg21.link/LWG3453>`__","Generic code cannot call ``ranges::advance(i, s)``","November 2020","",""
"`3455 <https://wg21.link/LWG3455>`__","Incorrect Postconditions on ``unique_ptr`` move assignment","November 2020","|Nothing To Do|",""
"`3460 <https://wg21.link/LWG3460>`__","Unimplementable ``noop_coroutine_handle`` guarantees","November 2020","|Complete|","14.0"
"`3461 <https://wg21.link/LWG3461>`__","``convertible_to``'s description mishandles cv-qualified ``void``","November 2020","|Nothing To Do|",""
"`3465 <https://wg21.link/LWG3465>`__","``compare_partial_order_fallback`` requires ``F < E``","November 2020","|Complete|","14.0","|spaceship|"
"`3466 <https://wg21.link/LWG3466>`__","Specify the requirements for ``promise``/``future``/``shared_future`` consistently","November 2020","|Nothing To Do|",""
"`3467 <https://wg21.link/LWG3467>`__","``bool`` can't be an integer-like type","November 2020","|Complete|","14.0"
"`3472 <https://wg21.link/LWG3472>`__","``counted_iterator`` is missing preconditions","November 2020","|Complete|","14.0","|ranges|"
"`3473 <https://wg21.link/LWG3473>`__","Normative encouragement in non-normative note","November 2020","|Nothing To Do|","","|format|"
"`3474 <https://wg21.link/LWG3474>`__","Nesting ``join_views`` is broken because of CTAD","November 2020","","","|ranges|"
"`3460 <https://wg21.link/LWG3460>`__","Unimplementable ``noop_coroutine_handle`` guarantees","November 2020","",""
"`3461 <https://wg21.link/LWG3461>`__","``convertible_to``'s description mishandles cv-qualified void","November 2020","",""
"`3465 <https://wg21.link/LWG3465>`__","compare_partial_order_fallback requires ``F < E``","November 2020","",""
"`3466 <https://wg21.link/LWG3466>`__","Specify the requirements for ``promise``/``future``/``shared_future`` consistently","November 2020","",""
"`3467 <https://wg21.link/LWG3467>`__","``bool`` can't be an integer-like type","November 2020","",""
"`3472 <https://wg21.link/LWG3472>`__","``counted_iterator`` is missing preconditions","November 2020","",""
"`3473 <https://wg21.link/LWG3473>`__","Normative encouragement in non-normative note","November 2020","",""
"`3474 <https://wg21.link/LWG3474>`__","Nesting ``join_views`` is broken because of CTAD","November 2020","",""
"`3476 <https://wg21.link/LWG3476>`__","``thread`` and ``jthread`` constructors require that the parameters be move-constructible but never move construct the parameters","November 2020","",""
"`3477 <https://wg21.link/LWG3477>`__","Simplify constraints for ``semiregular-box``","November 2020","","","|ranges|"
"`3482 <https://wg21.link/LWG3482>`__","``drop_view``'s const begin should additionally require ``sized_range``","November 2020","|Complete|","14.0","|ranges|"
"`3483 <https://wg21.link/LWG3483>`__","``transform_view::iterator``'s difference is overconstrained","November 2020","|Complete|","14.0","|ranges|"
"`3477 <https://wg21.link/LWG3477>`__","Simplify constraints for semiregular-box","November 2020","",""
"`3482 <https://wg21.link/LWG3482>`__","``drop_view``'s const begin should additionally require sized_range","November 2020","",""
"`3483 <https://wg21.link/LWG3483>`__","``transform_view::iterator``'s difference is overconstrained","November 2020","",""
"","","","",""
"`3391 <https://wg21.link/LWG3391>`__","Problems with ``counted_iterator``/``move_iterator::base() const &``","February 2021","","","|ranges|"
"`3433 <https://wg21.link/LWG3433>`__","``subrange::advance(n)`` has UB when ``n < 0``","February 2021","|Complete|","14.0","|ranges|"
"`3490 <https://wg21.link/LWG3490>`__","``ranges::drop_while_view::begin()`` is missing a precondition","February 2021","|Nothing To Do|","","|ranges|"
"`3492 <https://wg21.link/LWG3492>`__","Minimal improvements to ``elements_view::iterator``","February 2021","","","|ranges|"
"`3494 <https://wg21.link/LWG3494>`__","Allow ranges to be conditionally borrowed","February 2021","Superseded by `P2017R1 <https://wg21.link/P2017R1>`__","","|ranges|"
"`3495 <https://wg21.link/LWG3495>`__","``constexpr launder`` makes pointers to inactive members of unions usable","February 2021","|Nothing To Do|",""
"`3500 <https://wg21.link/LWG3500>`__","``join_view::iterator::operator->()`` is bogus","February 2021","","","|ranges|"
"`3502 <https://wg21.link/LWG3502>`__","``elements_view`` should not be allowed to return dangling reference","February 2021","","","|ranges|"
"`3505 <https://wg21.link/LWG3505>`__","``split_view::outer-iterator::operator++`` misspecified","February 2021","","","|ranges|"
"`3391 <https://wg21.link/LWG3391>`__","Problems with ``counted_iterator``/``move_iterator::base() const &``","February 2021","",""
"`3433 <https://wg21.link/LWG3433>`__","``subrange::advance(n)`` has UB when ``n < 0``","February 2021","",""
"`3490 <https://wg21.link/LWG3490>`__","``ranges::drop_while_view::begin()`` is missing a precondition","February 2021","",""
"`3492 <https://wg21.link/LWG3492>`__","Minimal improvements to ``elements_view::iterator``","February 2021","",""
"`3494 <https://wg21.link/LWG3494>`__","Allow ranges to be conditionally borrowed","February 2021","Superseded by `P2017R1 <https://wg21.link/P2017R1>`__",""
"`3495 <https://wg21.link/LWG3495>`__","``constexpr launder`` makes pointers to inactive members of unions usable","February 2021","",""
"`3500 <https://wg21.link/LWG3500>`__","``join_view::iterator::operator->()`` is bogus","February 2021","",""
"`3502 <https://wg21.link/LWG3502>`__","``elements_view`` should not be allowed to return dangling reference","February 2021","",""
"`3505 <https://wg21.link/LWG3505>`__","``split_view::outer-iterator::operator++`` misspecified","February 2021","",""
"","","","",""
`2774 <https://wg21.link/LWG2774>`__,"``std::function`` construction vs assignment","June 2021","",""
`2818 <https://wg21.link/LWG2818>`__,"``::std::`` everywhere rule needs tweaking","June 2021","|Nothing To Do|",""
`2818 <https://wg21.link/LWG2818>`__,"``::std::`` everywhere rule needs tweaking","June 2021","",""
`2997 <https://wg21.link/LWG2997>`__,"LWG 491 and the specification of ``{forward_,}list::unique``","June 2021","",""
`3410 <https://wg21.link/LWG3410>`__,"``lexicographical_compare_three_way`` is overspecified","June 2021","","","|spaceship|"
`3410 <https://wg21.link/LWG3410>`__,"``lexicographical_compare_three_way`` is overspecified","June 2021","",""
`3430 <https://wg21.link/LWG3430>`__,"``std::fstream`` & co. should be constructible from string_view","June 2021","",""
`3462 <https://wg21.link/LWG3462>`__,"§[formatter.requirements]: Formatter requirements forbid use of ``fc.arg()``","June 2021","","","|format|"
`3481 <https://wg21.link/LWG3481>`__,"``viewable_range`` mishandles lvalue move-only views","June 2021","Superseded by `P2415R2 <https://wg21.link/P2415R2>`__","","|ranges|"
`3506 <https://wg21.link/LWG3506>`__,"Missing allocator-extended constructors for ``priority_queue``","June 2021","|Complete|","14.0"
`3517 <https://wg21.link/LWG3517>`__,"``join_view::iterator``'s ``iter_swap`` is underconstrained","June 2021","","","|ranges|"
`3518 <https://wg21.link/LWG3518>`__,"Exception requirements on char trait operations unclear","June 2021","|Nothing To Do|",""
`3519 <https://wg21.link/LWG3519>`__,"Incomplete synopses for ``<random>`` classes","June 2021","",""
`3520 <https://wg21.link/LWG3520>`__,"``iter_move`` and ``iter_swap`` are inconsistent for ``transform_view::iterator``","June 2021","|Complete|","14.0","|ranges|"
`3521 <https://wg21.link/LWG3521>`__,"Overly strict requirements on ``qsort`` and ``bsearch``","June 2021","|Nothing To Do|",""
`3522 <https://wg21.link/LWG3522>`__,"Missing requirement on ``InputIterator`` template parameter for ``priority_queue`` constructors","June 2021","|Complete|","14.0","|ranges|"
`3523 <https://wg21.link/LWG3523>`__,"``iota_view::sentinel`` is not always ``iota_view``'s sentinel","June 2021","","","|ranges|"
`3462 <https://wg21.link/LWG3462>`__,"§[formatter.requirements]: Formatter requirements forbid use of ``fc.arg()``","June 2021","",""
`3481 <https://wg21.link/LWG3481>`__,"``viewable_range`` mishandles lvalue move-only views","June 2021","",""
`3506 <https://wg21.link/LWG3506>`__,"Missing allocator-extended constructors for ``priority_queue``","June 2021","",""
`3517 <https://wg21.link/LWG3517>`__,"``join_view::iterator``'s ``iter_swap`` is underconstrained","June 2021","",""
`3518 <https://wg21.link/LWG3518>`__,"Exception requirements on char trait operations unclear","June 2021","",""
`3519 <https://wg21.link/LWG3519>`__,"Incomplete synopses for <random> classes","June 2021","",""
`3520 <https://wg21.link/LWG3520>`__,"``iter_move`` and ``iter_swap`` are inconsistent for ``transform_view::iterator``","June 2021","",""
`3521 <https://wg21.link/LWG3521>`__,"Overly strict requirements on ``qsort`` and ``bsearch``","June 2021","",""
`3522 <https://wg21.link/LWG3522>`__,"Missing requirement on ``InputIterator`` template parameter for ``priority_queue`` constructors","June 2021","",""
`3523 <https://wg21.link/LWG3523>`__,"``iota_view::sentinel`` is not always ``iota_view``'s sentinel","June 2021","",""
`3526 <https://wg21.link/LWG3526>`__,"Return types of ``uses_allocator_construction_args`` unspecified","June 2021","",""
`3527 <https://wg21.link/LWG3527>`__,"``uses_allocator_construction_args`` handles rvalue pairs of rvalue references incorrectly","June 2021","",""
`3528 <https://wg21.link/LWG3528>`__,"``make_from_tuple`` can perform (the equivalent of) a C-style cast","June 2021","",""
`3529 <https://wg21.link/LWG3529>`__,"``priority_queue(first, last)`` should construct ``c`` with ``(first, last)``","June 2021","|Complete|","14.0"
`3529 <https://wg21.link/LWG3529>`__,"``priority_queue(first, last)`` should construct ``c`` with ``(first, last)``","June 2021","",""
`3530 <https://wg21.link/LWG3530>`__,"``BUILTIN-PTR-MEOW`` should not opt the type out of syntactic checks","June 2021","",""
`3532 <https://wg21.link/LWG3532>`__,"``split_view<V, P>::inner-iterator<true>::operator++(int)`` should depend on ``Base``","June 2021","","","|ranges|"
`3533 <https://wg21.link/LWG3533>`__,"Make ``base() const &`` consistent across iterator wrappers that supports ``input_iterators``","June 2021","|Complete|","14.0","|ranges|"
`3536 <https://wg21.link/LWG3536>`__,"Should ``chrono::from_stream()`` assign zero to duration for failure?","June 2021","","","|chrono|"
`3539 <https://wg21.link/LWG3539>`__,"``format_to`` must not copy models of ``output_iterator<const charT&>``","June 2021","","","|format|"
`3540 <https://wg21.link/LWG3540>`__,"§[format.arg] There should be no const in ``basic_format_arg(const T* p)``","June 2021","|Complete|","14.0","|format|"
`3541 <https://wg21.link/LWG3541>`__,"``indirectly_readable_traits`` should be SFINAE-friendly for all types","June 2021","|Complete|","14.0","|ranges|"
`3542 <https://wg21.link/LWG3542>`__,"``basic_format_arg`` mishandles ``basic_string_view`` with custom traits","June 2021","|Complete|","14.0","|format|"
`3543 <https://wg21.link/LWG3543>`__,"Definition of when ``counted_iterators`` refer to the same sequence isn't quite right","June 2021","|Nothing To Do|","","|ranges|"
`3544 <https://wg21.link/LWG3544>`__,"``format-arg-store::args`` is unintentionally not exposition-only","June 2021","|Complete|","14.0","|format|"
`3546 <https://wg21.link/LWG3546>`__,"``common_iterator``'s postfix-proxy is not quite right","June 2021","","","|ranges|"
`3532 <https://wg21.link/LWG3532>`__,"``split_view<V, P>::inner-iterator<true>::operator++(int)`` should depend on ``Base``","June 2021","",""
`3533 <https://wg21.link/LWG3533>`__,"Make ``base() const &`` consistent across iterator wrappers that supports ``input_iterators``","June 2021","",""
`3536 <https://wg21.link/LWG3536>`__,"Should ``chrono::from_stream()`` assign zero to duration for failure?","June 2021","",""
`3539 <https://wg21.link/LWG3539>`__,"``format_to`` must not copy models of ``output_iterator<const charT&>``","June 2021","",""
`3540 <https://wg21.link/LWG3540>`__,"§[format.arg] There should be no const in ``basic_format_arg(const T* p)``","June 2021","",""
`3541 <https://wg21.link/LWG3541>`__,"``indirectly_readable_traits`` should be SFINAE-friendly for all types","June 2021","",""
`3542 <https://wg21.link/LWG3542>`__,"``basic_format_arg`` mishandles ``basic_string_view`` with custom traits","June 2021","",""
`3543 <https://wg21.link/LWG3543>`__,"Definition of when ``counted_iterators`` refer to the same sequence isn't quite right","June 2021","",""
`3544 <https://wg21.link/LWG3544>`__,"``format-arg-store::args`` is unintentionally not exposition-only","June 2021","",""
`3546 <https://wg21.link/LWG3546>`__,"``common_iterator``'s postfix-proxy is not quite right","June 2021","",""
`3548 <https://wg21.link/LWG3548>`__,"``shared_ptr`` construction from ``unique_ptr`` should move (not copy) the deleter","June 2021","",""
`3549 <https://wg21.link/LWG3549>`__,"``view_interface`` is overspecified to derive from ``view_base``","June 2021","|Complete|","14.0","|ranges|"
`3551 <https://wg21.link/LWG3551>`__,"``borrowed_{iterator,subrange}_t`` are overspecified","June 2021","|Nothing To Do|","","|ranges|"
`3549 <https://wg21.link/LWG3549>`__,"``view_interface`` is overspecified to derive from ``view_base``","June 2021","",""
`3551 <https://wg21.link/LWG3551>`__,"``borrowed_{iterator,subrange}_t`` are overspecified","June 2021","",""
`3552 <https://wg21.link/LWG3552>`__,"Parallel specialized memory algorithms should require forward iterators","June 2021","",""
`3553 <https://wg21.link/LWG3553>`__,"Useless constraint in ``split_view::outer-iterator::value_type::begin()``","June 2021","","","|ranges|"
`3555 <https://wg21.link/LWG3555>`__,"``{transform,elements}_view::iterator::iterator_concept`` should consider const-qualification of the underlying range","June 2021","","","|ranges|"
"","","","",""
`2191 <https://wg21.link/LWG2191>`__,"Incorrect specification of ``match_results(match_results&&)``","October 2021","|Nothing To Do|",""
`2381 <https://wg21.link/LWG2381>`__,"Inconsistency in parsing floating point numbers","October 2021","",""
`2762 <https://wg21.link/LWG2762>`__,"``unique_ptr operator*()`` should be ``noexcept``","October 2021","",""
`3121 <https://wg21.link/LWG3121>`__,"``tuple`` constructor constraints for ``UTypes&&...`` overloads","October 2021","",""
`3123 <https://wg21.link/LWG3123>`__,"``duration`` constructor from representation shouldn't be effectively non-throwing","October 2021","","","|chrono|"
`3146 <https://wg21.link/LWG3146>`__,"Excessive unwrapping in ``std::ref/cref``","October 2021","|Complete|","14.0"
`3152 <https://wg21.link/LWG3152>`__,"``common_type`` and ``common_reference`` have flaws in common","October 2021","",""
`3293 <https://wg21.link/LWG3293>`__,"``move_iterator operator+()`` has incorrect constraints","October 2021","","","|ranges|"
`3361 <https://wg21.link/LWG3361>`__,"``safe_range<SomeRange&>`` case","October 2021","|Nothing To Do|","","|ranges|"
`3392 <https://wg21.link/LWG3392>`__,"``ranges::distance()`` cannot be used on a move-only iterator with a sized sentinel","October 2021","|Complete|","14.0","|ranges|"
`3407 <https://wg21.link/LWG3407>`__,"Some problems with the wording changes of P1739R4","October 2021","","","|ranges|"
`3422 <https://wg21.link/LWG3422>`__,"Issues of ``seed_seq``'s constructors","October 2021","|Complete|","14.0"
`3470 <https://wg21.link/LWG3470>`__,"``convertible-to-non-slicing`` seems to reject valid case","October 2021","|Complete|","14.0","|ranges|"
`3480 <https://wg21.link/LWG3480>`__,"``directory_iterator`` and ``recursive_directory_iterator`` are not C++20 ranges","October 2021","|Complete|","14.0","|ranges|"
`3498 <https://wg21.link/LWG3498>`__,"Inconsistent ``noexcept``-specifiers for ``basic_syncbuf``","October 2021","",""
`3535 <https://wg21.link/LWG3535>`__,"``join_view::iterator::iterator_category`` and ``::iterator_concept`` lie","October 2021","","","|ranges|"
`3554 <https://wg21.link/LWG3554>`__,"``chrono::parse`` needs ``const charT*`` and ``basic_string_view<charT>`` overloads","October 2021","","","|chrono|"
`3557 <https://wg21.link/LWG3557>`__,"The ``static_cast`` expression in ``convertible_to`` has the wrong operand","October 2021","|Complete|","14.0"
`3559 <https://wg21.link/LWG3559>`__,"Semantic requirements of ``sized_range`` is circular","October 2021","|Nothing To Do|","","|ranges|"
`3560 <https://wg21.link/LWG3560>`__,"``ranges::equal`` and ``ranges::is_permutation`` should short-circuit for ``sized_ranges``","October 2021","","","|ranges|"
`3561 <https://wg21.link/LWG3561>`__,"Issue with internal counter in ``discard_block_engine``","October 2021","",""
`3563 <https://wg21.link/LWG3563>`__,"``keys_view`` example is broken","October 2021","","","|ranges|"
`3566 <https://wg21.link/LWG3566>`__,"Constraint recursion for ``operator<=>(optional<T>, U)``","October 2021","","","|spaceship|"
`3567 <https://wg21.link/LWG3567>`__,"Formatting move-only iterators take two","October 2021","","","|format|"
`3568 <https://wg21.link/LWG3568>`__,"``basic_istream_view`` needs to initialize ``value_``","October 2021","","","|ranges|"
`3570 <https://wg21.link/LWG3570>`__,"``basic_osyncstream::emit`` should be an unformatted output function","October 2021","",""
`3571 <https://wg21.link/LWG3571>`__,"``flush_emit`` should set ``badbit`` if the ``emit`` call fails","October 2021","",""
`3572 <https://wg21.link/LWG3572>`__,"``copyable-box`` should be fully ``constexpr``","October 2021","|Complete|","14.0","|ranges|"
`3573 <https://wg21.link/LWG3573>`__,"Missing Throws element for ``basic_string_view(It begin, End end)``","October 2021","|Complete|","14.0"
`3574 <https://wg21.link/LWG3574>`__,"``common_iterator`` should be completely ``constexpr``-able","October 2021","|Complete|","14.0","|ranges|"
`3580 <https://wg21.link/LWG3580>`__,"``iota_view``'s ``iterator``'s binary ``operator+`` should be improved","October 2021","|Complete|","14.0","|ranges|"
`3581 <https://wg21.link/LWG3581>`__,"The range constructor makes ``basic_string_view`` not trivially move constructible","October 2021","|Complete|","14.0","|ranges|"
`3585 <https://wg21.link/LWG3585>`__,"``variant`` converting assignment with immovable alternative","October 2021","",""
`3589 <https://wg21.link/LWG3589>`__,"The ``const`` lvalue reference overload of ``get`` for ``subrange`` does not constrain ``I`` to be ``copyable`` when ``N == 0``","October 2021","|Complete|","14.0","|ranges|"
`3590 <https://wg21.link/LWG3590>`__,"``split_view::base() const &`` is overconstrained","October 2021","","","|ranges|"
`3591 <https://wg21.link/LWG3591>`__,"``lazy_split_view<input_view>::inner-iterator::base() &&`` invalidates outer iterators","October 2021","","","|ranges|"
`3592 <https://wg21.link/LWG3592>`__,"``lazy_split_view`` needs to check the simpleness of Pattern","October 2021","","","|ranges|"
`3593 <https://wg21.link/LWG3593>`__,"Several iterators' ``base() const &`` and ``lazy_split_view::outer-iterator::value_type::end()`` missing ``noexcept``","October 2021","","","|ranges|"
`3595 <https://wg21.link/LWG3595>`__,"Exposition-only classes proxy and postfix-proxy for ``common_iterator`` should be fully ``constexpr``","October 2021","|Complete|","14.0","|ranges|"
"","","","",""
`3645 <https://wg21.link/LWG3645>`__,"``resize_and_overwrite`` is overspecified to call its callback with lvalues", "Not voted in","|Complete|","14.0",""
`3553 <https://wg21.link/LWG3553>`__,"Useless constraint in ``split_view::outer-iterator::value_type::begin()``","June 2021","",""
`3555 <https://wg21.link/LWG3555>`__,"``{transform,elements}_view::iterator::iterator_concept`` should consider const-qualification of the underlying range","June 2021","",""
"","","","",""

Can't render this file because it has a wrong number of fields in line 2.

View File

@ -15,26 +15,11 @@
"`P0448R4 <https://wg21.link/P0448R4>`__","LWG","A strstream replacement using span<charT> as buffer","June 2021","",""
"`P1132R8 <https://wg21.link/P1132R8>`__","LWG","out_ptr - a scalable output pointer abstraction","June 2021","",""
"`P1328R1 <https://wg21.link/P1328R1>`__","LWG","Making std::type_info::operator== constexpr","June 2021","",""
"`P1425R4 <https://wg21.link/P1425R4>`__","LWG","Iterators pair constructors for stack and queue","June 2021","|Complete|","14.0"
"`P1425R4 <https://wg21.link/P1425R4>`__","LWG","Iterators pair constructors for stack and queue","June 2021","",""
"`P1518R2 <https://wg21.link/P1518R2>`__","LWG","Stop overconstraining allocators in container deduction guides","June 2021","|Complete|","13.0"
"`P1659R3 <https://wg21.link/P1659R3>`__","LWG","starts_with and ends_with","June 2021","",""
"`P1951R1 <https://wg21.link/P1951R1>`__","LWG","Default Arguments for pair Forwarding Constructor","June 2021","|Complete|","14.0"
"`P1989R2 <https://wg21.link/P1989R2>`__","LWG","Range constructor for std::string_view","June 2021","|Complete|","14.0"
"`P1951R1 <https://wg21.link/P1951R1>`__","LWG","Default Arguments for pair Forwarding Constructor","June 2021","",""
"`P1989R2 <https://wg21.link/P1989R2>`__","LWG","Range constructor for std::string_view","June 2021","",""
"`P2136R3 <https://wg21.link/P2136R3>`__","LWG","invoke_r","June 2021","",""
"`P2166R1 <https://wg21.link/P2166R1>`__","LWG","A Proposal to Prohibit std::basic_string and std::basic_string_view construction from nullptr","June 2021","|Complete|","13.0"
"","","","","",""
"`P0288R9 <https://wg21.link/P0288R9>`__","LWG","``any_invocable``","October 2021","",""
"`P0798R8 <https://wg21.link/P0798R8>`__","LWG","Monadic operations for ``std::optional``","October 2021","|Complete|","14.0"
"`P0849R8 <https://wg21.link/P0849R8>`__","LWG","``auto(x)``: ``DECAY_COPY`` in the language","October 2021","|Complete|","14.0"
"`P1072R10 <https://wg21.link/P1072R10>`__","LWG","``basic_string::resize_and_overwrite``","October 2021","|Complete|","14.0"
"`P1147R1 <https://wg21.link/P1147R1>`__","LWG","Printing ``volatile`` Pointers","October 2021","|Complete|","14.0"
"`P1272R4 <https://wg21.link/P1272R4>`__","LWG","Byteswapping for fun&&nuf","October 2021","|Complete|","14.0"
"`P1675R2 <https://wg21.link/P1675R2>`__","LWG","``rethrow_exception`` must be allowed to copy","October 2021","",""
"`P2077R3 <https://wg21.link/P2077R3>`__","LWG","Heterogeneous erasure overloads for associative containers","October 2021","",""
"`P2251R1 <https://wg21.link/P2251R1>`__","LWG","Require ``span`` & ``basic_string_view`` to be Trivially Copyable","October 2021","|Complete|","14.0"
"`P2301R1 <https://wg21.link/P2301R1>`__","LWG","Add a ``pmr`` alias for ``std::stacktrace``","October 2021","",""
"`P2321R2 <https://wg21.link/P2321R2>`__","LWG","``zip``","October 2021","|In Progress|",""
"`P2340R1 <https://wg21.link/P2340R1>`__","LWG","Clarifying the status of the 'C headers'","October 2021","",""
"`P2393R1 <https://wg21.link/P2393R1>`__","LWG","Cleaning up ``integer``-class types","October 2021","",""
"`P2401R0 <https://wg21.link/P2401R0>`__","LWG","Add a conditional ``noexcept`` specification to ``std::exchange``","October 2021","|Complete|","14.0"
"","","","","",""
"","","","","",""
1 Paper # Group Paper Name Meeting Status First released version
15 `P0448R4 <https://wg21.link/P0448R4>`__ LWG A strstream replacement using span<charT> as buffer June 2021
16 `P1132R8 <https://wg21.link/P1132R8>`__ LWG out_ptr - a scalable output pointer abstraction June 2021
17 `P1328R1 <https://wg21.link/P1328R1>`__ LWG Making std::type_info::operator== constexpr June 2021
18 `P1425R4 <https://wg21.link/P1425R4>`__ LWG Iterators pair constructors for stack and queue June 2021 |Complete| 14.0
19 `P1518R2 <https://wg21.link/P1518R2>`__ LWG Stop overconstraining allocators in container deduction guides June 2021 |Complete| 13.0
20 `P1659R3 <https://wg21.link/P1659R3>`__ LWG starts_with and ends_with June 2021
21 `P1951R1 <https://wg21.link/P1951R1>`__ LWG Default Arguments for pair Forwarding Constructor June 2021 |Complete| 14.0
22 `P1989R2 <https://wg21.link/P1989R2>`__ LWG Range constructor for std::string_view June 2021 |Complete| 14.0
23 `P2136R3 <https://wg21.link/P2136R3>`__ LWG invoke_r June 2021
24 `P2166R1 <https://wg21.link/P2166R1>`__ LWG A Proposal to Prohibit std::basic_string and std::basic_string_view construction from nullptr June 2021 |Complete| 13.0
25
`P0288R9 <https://wg21.link/P0288R9>`__ LWG ``any_invocable`` October 2021
`P0798R8 <https://wg21.link/P0798R8>`__ LWG Monadic operations for ``std::optional`` October 2021 |Complete| 14.0
`P0849R8 <https://wg21.link/P0849R8>`__ LWG ``auto(x)``: ``DECAY_COPY`` in the language October 2021 |Complete| 14.0
`P1072R10 <https://wg21.link/P1072R10>`__ LWG ``basic_string::resize_and_overwrite`` October 2021 |Complete| 14.0
`P1147R1 <https://wg21.link/P1147R1>`__ LWG Printing ``volatile`` Pointers October 2021 |Complete| 14.0
`P1272R4 <https://wg21.link/P1272R4>`__ LWG Byteswapping for fun&&nuf October 2021 |Complete| 14.0
`P1675R2 <https://wg21.link/P1675R2>`__ LWG ``rethrow_exception`` must be allowed to copy October 2021
`P2077R3 <https://wg21.link/P2077R3>`__ LWG Heterogeneous erasure overloads for associative containers October 2021
`P2251R1 <https://wg21.link/P2251R1>`__ LWG Require ``span`` & ``basic_string_view`` to be Trivially Copyable October 2021 |Complete| 14.0
`P2301R1 <https://wg21.link/P2301R1>`__ LWG Add a ``pmr`` alias for ``std::stacktrace`` October 2021
`P2321R2 <https://wg21.link/P2321R2>`__ LWG ``zip`` October 2021 |In Progress|
`P2340R1 <https://wg21.link/P2340R1>`__ LWG Clarifying the status of the 'C headers' October 2021
`P2393R1 <https://wg21.link/P2393R1>`__ LWG Cleaning up ``integer``-class types October 2021
`P2401R0 <https://wg21.link/P2401R0>`__ LWG Add a conditional ``noexcept`` specification to ``std::exchange`` October 2021 |Complete| 14.0

View File

@ -39,6 +39,10 @@ Misc. Items and TODOs
(Please mark all Format-related TODO comments with the string ``TODO FMT``, so we
can find them easily.)
* C++23 may break the ABI with `P2216 <https://wg21.link/P2216>`_.
This ABI break may be backported to C++20. Therefore the library will not
be available on platforms where the ABI break is an issue.
Paper and Issue Status
======================

View File

@ -1,10 +1,31 @@
Number,Name,Assignee,Patch,Status,First released version
`P0645 <https://wg21.link/P0645>`_,"Text Formatting",Mark de Wever,,|Complete|,Clang 14
`P1652 <https://wg21.link/P1652>`_,"Printf corner cases in std::format",Mark de Wever,"`D103433 <https://reviews.llvm.org/D103433>`__, `D114001 <https://reviews.llvm.org/D114001>`__",|Complete|,Clang 14
`P1892 <https://wg21.link/P1892>`_,"Extended locale-specific presentation specifiers for std::format",Mark de Wever,`D103368 <https://reviews.llvm.org/D103368>`__,|Complete|,Clang 14
`P1868 <https://wg21.link/P1868>`_,"width: clarifying units of width and precision in std::format (Implements the unicode support.)",Mark de Wever,"`D103413 <https://reviews.llvm.org/D103413>`__ `D103425 <https://reviews.llvm.org/D103425>`__ `D103670 <https://reviews.llvm.org/D103670>`__",|Complete|,Clang 14
`P2216 <https://wg21.link/P2216>`_,"std::format improvements",Mark de Wever,,|In Progress|,
`P2418 <https://wg21.link/P2418>`__,"Add support for ``std::generator``-like types to ``std::format``",Mark de Wever,,|In Progress|,
`P0645 <https://wg21.link/P0645>`_,"Text Formatting",Mark de Wever,,|partial|,
`P1652 <https://wg21.link/P1652>`_,"Printf corner cases in std::format",Mark de Wever,`D103433 <https://reviews.llvm.org/D103433>`__,Review,
`P1892 <https://wg21.link/P1892>`_,"Extended locale-specific presentation specifiers for std::format",Mark de Wever,`D103368 <https://reviews.llvm.org/D103368>`__,Review,
`P1868 <https://wg21.link/P1868>`_,"width: clarifying units of width and precision in std::format (Implements the unicode support.)",Mark de Wever,"`D103413 <https://reviews.llvm.org/D103413>`__ `D103425 <https://reviews.llvm.org/D103425>`__ `D103670 <https://reviews.llvm.org/D103670>`__",Review,
`P2216 <https://wg21.link/P2216>`_,"std::format improvements",,,,
`LWG-3242 <https://wg21.link/LWG3242>`_,"std::format: missing rules for arg-id in width and precision",Mark de Wever,`D103368 <https://reviews.llvm.org/D103368>`__,Review,
`LWG-3243 <https://wg21.link/LWG3243>`_,"std::format and negative zeroes",,,,
`LWG-3246 <https://wg21.link/LWG3246>`_,"What are the constraints on the template parameter of basic_format_arg?",,,,
`LWG-3248 <https://wg21.link/LWG3248>`_,"std::format #b, #B, #o, #x, and #X presentation types misformat negative numbers",Mark de Wever,`D103433 <https://reviews.llvm.org/D103433>`__,Review,
`LWG-3250 <https://wg21.link/LWG3250>`_,"std::format: # (alternate form) for NaN and inf",,,,
`LWG-3327 <https://wg21.link/LWG3327>`_,"Format alignment specifiers vs. text direction",,,|Nothing To Do|,
`LWG-3340 <https://wg21.link/LWG3340>`_,"Formatting functions should throw on argument/format string mismatch in [format.functions]",,,,
`LWG-3371 <https://wg21.link/LWG3371>`_,"visit_format_arg and make_format_args are not hidden friends",Mark de Wever,`D103357 <https://llvm.org/D103357>`__,Review,
`LWG-3372 <https://wg21.link/LWG3372>`_,"vformat_to should not try to deduce Out twice",,,,
`LWG-3373 <https://wg21.link/LWG3373>`_,"{to,from}_chars_result and format_to_n_result need the 'we really mean what we say'",,,,
`LWG-3462 <https://wg21.link/LWG3462>`_,"§[formatter.requirements]: Formatter requirements forbid use of fc.arg()",,,,
`LWG-3539 <https://wg21.link/LWG3539>`_,"format_to must not copy models of output_iterator<const charT&>",,,,
`LWG-3540 <https://wg21.link/LWG3540>`_,"§[format.arg] There should be no const in basic_format_arg(const T* p)",,,,
`LWG-3541 <https://wg21.link/LWG3541>`_,"indirectly_readable_traits should be SFINAE-friendly for all types",,,,
`LWG-3542 <https://wg21.link/LWG3542>`_,"basic_format_arg mishandles basic_string_view with custom traits",,,,
`LWG-3544 <https://wg21.link/LWG3544>`_,"format-arg-store::args is unintentionally not exposition-only",,,,
`P1361 <https://wg21.link/P1361>`_,"Integration of chrono with text formatting",,,|Not Started|,
`P2372 <https://wg21.link/P2372>`__,"Fixing locale handling in chrono formatters",,,|Not Started|,
`P1361 <https://wg21.link/P1361>`_,"Integration of chrono with text formatting",,,,
`LWG-3218 <https://wg21.link/LWG3218>`_,"Modifier for %d parse flag does not match POSIX and format specification",,,,
`LWG-3230 <https://wg21.link/LWG3230>`_,"Format specifier %y/%Y is missing locale alternative versions",,,,
`LWG-3241 <https://wg21.link/LWG3241>`_,"chrono-spec grammar ambiguity in [time.format]",,,,
`LWG-3262 <https://wg21.link/LWG3262>`_,"Formatting of negative durations is not specified",,,,
`LWG-3270 <https://wg21.link/LWG3270>`_,"Parsing and formatting %j with durations",,,,
`LWG-3272 <https://wg21.link/LWG3272>`_,"%I%p should parse/format duration since midnight",,,,
`LWG-3332 <https://wg21.link/LWG3332>`_,"Issue in [time.format]",,,,

1 Number Name Assignee Patch Status First released version
2 `P0645 <https://wg21.link/P0645>`_ Text Formatting Mark de Wever |Complete| |partial| Clang 14
3 `P1652 <https://wg21.link/P1652>`_ Printf corner cases in std::format Mark de Wever `D103433 <https://reviews.llvm.org/D103433>`__, `D114001 <https://reviews.llvm.org/D114001>`__ `D103433 <https://reviews.llvm.org/D103433>`__ |Complete| Review Clang 14
4 `P1892 <https://wg21.link/P1892>`_ Extended locale-specific presentation specifiers for std::format Mark de Wever `D103368 <https://reviews.llvm.org/D103368>`__ |Complete| Review Clang 14
5 `P1868 <https://wg21.link/P1868>`_ width: clarifying units of width and precision in std::format (Implements the unicode support.) Mark de Wever `D103413 <https://reviews.llvm.org/D103413>`__ `D103425 <https://reviews.llvm.org/D103425>`__ `D103670 <https://reviews.llvm.org/D103670>`__ |Complete| Review Clang 14
6 `P2216 <https://wg21.link/P2216>`_ std::format improvements Mark de Wever |In Progress|
7 `P2418 <https://wg21.link/P2418>`__ `LWG-3242 <https://wg21.link/LWG3242>`_ Add support for ``std::generator``-like types to ``std::format`` std::format: missing rules for arg-id in width and precision Mark de Wever `D103368 <https://reviews.llvm.org/D103368>`__ |In Progress| Review
8 `LWG-3243 <https://wg21.link/LWG3243>`_ std::format and negative zeroes
9 `LWG-3246 <https://wg21.link/LWG3246>`_ What are the constraints on the template parameter of basic_format_arg?
10 `LWG-3248 <https://wg21.link/LWG3248>`_ std::format #b, #B, #o, #x, and #X presentation types misformat negative numbers Mark de Wever `D103433 <https://reviews.llvm.org/D103433>`__ Review
11 `LWG-3250 <https://wg21.link/LWG3250>`_ std::format: # (alternate form) for NaN and inf
12 `LWG-3327 <https://wg21.link/LWG3327>`_ Format alignment specifiers vs. text direction |Nothing To Do|
13 `LWG-3340 <https://wg21.link/LWG3340>`_ Formatting functions should throw on argument/format string mismatch in [format.functions]
14 `LWG-3371 <https://wg21.link/LWG3371>`_ visit_format_arg and make_format_args are not hidden friends Mark de Wever `D103357 <https://llvm.org/D103357>`__ Review
15 `LWG-3372 <https://wg21.link/LWG3372>`_ vformat_to should not try to deduce Out twice
16 `LWG-3373 <https://wg21.link/LWG3373>`_ {to,from}_chars_result and format_to_n_result need the 'we really mean what we say'
17 `LWG-3462 <https://wg21.link/LWG3462>`_ §[formatter.requirements]: Formatter requirements forbid use of fc.arg()
18 `LWG-3539 <https://wg21.link/LWG3539>`_ format_to must not copy models of output_iterator<const charT&>
19 `LWG-3540 <https://wg21.link/LWG3540>`_ §[format.arg] There should be no const in basic_format_arg(const T* p)
20 `LWG-3541 <https://wg21.link/LWG3541>`_ indirectly_readable_traits should be SFINAE-friendly for all types
21 `LWG-3542 <https://wg21.link/LWG3542>`_ basic_format_arg mishandles basic_string_view with custom traits
22 `LWG-3544 <https://wg21.link/LWG3544>`_ format-arg-store::args is unintentionally not exposition-only
23 `P1361 <https://wg21.link/P1361>`_ Integration of chrono with text formatting |Not Started|
24 `P2372 <https://wg21.link/P2372>`__ `LWG-3218 <https://wg21.link/LWG3218>`_ Fixing locale handling in chrono formatters Modifier for %d parse flag does not match POSIX and format specification |Not Started|
25 `LWG-3230 <https://wg21.link/LWG3230>`_ Format specifier %y/%Y is missing locale alternative versions
26 `LWG-3241 <https://wg21.link/LWG3241>`_ chrono-spec grammar ambiguity in [time.format]
27 `LWG-3262 <https://wg21.link/LWG3262>`_ Formatting of negative durations is not specified
28 `LWG-3270 <https://wg21.link/LWG3270>`_ Parsing and formatting %j with durations
29 `LWG-3272 <https://wg21.link/LWG3272>`_ %I%p should parse/format duration since midnight
30 `LWG-3332 <https://wg21.link/LWG3332>`_ Issue in [time.format]
31

View File

@ -1,49 +1,48 @@
Section,Description,Dependencies,Assignee,Patch,Status,First released version
`[charconv.to.chars] <https://wg21.link/charconv.to.chars>`_,"Fix integral conformance",,Mark de Wever,`D100722 <https://llvm.org/D100722>`__,|Complete|,Clang 13
`[charconv.to.chars] <https://wg21.link/charconv.to.chars>`_,"Add floating-point conversion",`D100722 <https://llvm.org/D100722>`__,"Mark de Wever (Code provided by Stephan T. Lavavej of Microsoft)",`D70631 <https://llvm.org/D70631>`__,|Complete|,Clang 14
`[format.error] <https://wg21.link/format.error>`_,"Class format_error",,Mark de Wever,`D92214 <https://llvm.org/D92214>`__,|Complete|,Clang 13
`[format.parse.ctx] <https://wg21.link/format.parse.ctx>`_,"Class template basic_format_parse_context",,Mark de Wever,`D93166 <https://llvm.org/D93166>`__,|Complete|,Clang 13
`[format.context] <https://wg21.link/format.context>`_,"Class template basic_format_context",,Mark de Wever,`D103357 <https://llvm.org/D103357>`__,|Complete|,Clang 14
`[format.args] <https://wg21.link/format.args>`_,"Class template basic_format_args",,Mark de Wever,`D103357 <https://llvm.org/D103357>`__,|Complete|,Clang 14
`[format.arg] <https://wg21.link/format.arg>`_,"Class template basic_format_arg",,Mark de Wever,`D103357 <https://llvm.org/D103357>`__,|Complete|,Clang 14
`[format.arg] <https://wg21.link/format.arg>`_,"Class template basic_format_arg - handle",,Mark de Wever,,|Complete|,Clang 14
`[format.arg] <https://wg21.link/format.arg>`_,"Class template basic_format_arg - pointers",,Mark de Wever,,|Complete|,Clang 14
`[format.arg.store] <https://wg21.link/format.arg.store>`_,"Class template format-arg-store",,Mark de Wever,`D103357 <https://llvm.org/D103357>`__,|Complete|,Clang 14
`[format.formatter.spec] <https://wg21.link/format.formatter.spec>`_,"Formatter specializations - character types",,Mark de Wever,"`D96664 <https://llvm.org/D96664>`__ `D103466 <https://llvm.org/D103466>`__",|Complete|,Clang 14
`[format.formatter.spec] <https://wg21.link/format.formatter.spec>`_,"Formatter specializations - string types",,Mark de Wever,"`D96664 <https://llvm.org/D96664>`__ `D103425 <https://reviews.llvm.org/D103425>`__",|Complete|,Clang 14
`[format.formatter.spec] <https://wg21.link/format.formatter.spec>`_,"Formatter specializations - boolean type",,Mark de Wever,"`D96664 <https://llvm.org/D96664>`__ `D103670 <https://reviews.llvm.org/D103670>`__",|Complete|,Clang 14
`[format.formatter.spec] <https://wg21.link/format.formatter.spec>`_,"Formatter specializations - integral types",,Mark de Wever,"`D96664 <https://llvm.org/D96664>`__ `D103433 <https://reviews.llvm.org/D103433>`__",|Complete|,Clang 14
`[format.formatter.spec] <https://wg21.link/format.formatter.spec>`_,"Formatter specializations - floating-point types",`D70631 <https://llvm.org/D70631>`__,Mark de Wever,`D114001 <https://reviews.llvm.org/D114001>`__,|Complete|,Clang 14
`[format.formatter.spec] <https://wg21.link/format.formatter.spec>`_,"Formatter specializations - pointer types",,Mark de Wever,,|Complete|,Clang 14
`[format.string.std] <https://wg21.link/format.string.std>`_,"Standard format specifiers - character types",,Mark de Wever,`D103368 <https://reviews.llvm.org/D103368>`__,|Complete|,Clang 14
`[format.string.std] <https://wg21.link/format.string.std>`_,"Standard format specifiers - string types",`D103379 <https://reviews.llvm.org/D103379>`__,Mark de Wever,"`D103368 <https://reviews.llvm.org/D103368>`__ `D103413 <https://reviews.llvm.org/D103413>`__",|Complete|,Clang 14
`[format.string.std] <https://wg21.link/format.string.std>`_,"Standard format specifiers - boolean type",`D103379 <https://reviews.llvm.org/D103379>`__,Mark de Wever,"`D103368 <https://reviews.llvm.org/D103368>`__ `D103413 <https://reviews.llvm.org/D103413>`__",|Complete|,Clang 14
`[format.string.std] <https://wg21.link/format.string.std>`_,"Standard format specifiers - integral types",,Mark de Wever,`D103368 <https://reviews.llvm.org/D103368>`__,|Complete|,Clang 14
`[format.string.std] <https://wg21.link/format.string.std>`_,"Standard format specifiers - floating-point types",,Mark de Wever,`D114001 <https://reviews.llvm.org/D114001>`__,|Complete|,Clang 14
`[format.string.std] <https://wg21.link/format.string.std>`_,"Standard format specifiers - pointer types",,Mark de Wever,,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - format(string_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - format(wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - format(const locale& loc, string_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - format(const locale& loc, wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - vformat(string_view fmt, format_args args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - vformat(wstring_view fmt, wformat_args args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - vformat(const locale& loc, string_view fmt, format_args args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - vformat(const locale& loc, wstring_view fmt, wformat_args args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - format_to(Out out, wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - format_to(Out out, const locale& loc, wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - vformat_to(Out out, string_view fmt, format_args_t<type_identity_t<Out>, char> args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - vformat_to(Out out, wstring_view fmt, format_args_t<type_identity_t<Out>, char> args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - vformat_to(Out out, const locale& loc, string_view fmt, format_args_t<type_identity_t<Out>, char> args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - vformat_to(Out out, const locale& loc, wstring_view fmt,format_args_t<type_identity_t<Out>, wchar_t> args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - format_to_n(Out out, iter_difference_t<Out> n, string_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - format_to_n(Out out, iter_difference_t<Out> n, wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n, const locale& loc, string_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n, const locale& loc, wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - formatted_size(string_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - formatted_size(wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - formatted_size(const locale& loc, string_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - formatted_size(const locale& loc, wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,|Complete|,Clang 14
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - Improve performance format_to_n",,Mark de Wever,`D110499 <https://llvm.org/D110499>`__,|Review|,
`[format.functions] <https://wg21.link/format.functions>`_,"Format functions - Improve performance formatted size",,Mark de Wever,`D110500 <https://llvm.org/D110500>`__,|Review|,
`[format.functions] <https://wg21.link/format.functions>`_,"`P2216 <https://wg21.link/P2216>`_ - Compile-time checks",,Mark de Wever,,|In Progress|,
`[format.functions] <https://wg21.link/format.functions>`_,"`P2216 <https://wg21.link/P2216>`_ - Binary size",,Mark de Wever,`D110494 <https://llvm.org/D110494>`__,|Complete|,Clang 14
[charconv.to.chars],"Fix integral conformance",,Mark de Wever,`D100722 <https://llvm.org/D100722>`__,|Complete|,Clang 13
[charconv.to.chars],"Add floating-point conversion",`D100722 <https://llvm.org/D100722>`__,"Mark de Wever (Code provided by Stephan T. Lavavej of Microsoft)",`D70631 <https://llvm.org/D70631>`__,In progress,
[format.error],"Class format_error",,Mark de Wever,`D92214 <https://llvm.org/D92214>`__,|Complete|,Clang 13
[format.parse.ctx],"Class template basic_format_parse_context",,Mark de Wever,`D93166 <https://llvm.org/D93166>`__,|Complete|,Clang 13
[format.context],"Class template basic_format_context",,Mark de Wever,`D103357 <https://llvm.org/D103357>`__,Review,
[format.args],"Class template basic_format_args",,Mark de Wever,`D103357 <https://llvm.org/D103357>`__,Review,
[format.arg],"Class template basic_format_arg",,Mark de Wever,`D103357 <https://llvm.org/D103357>`__,Review,
[format.arg],"Class template basic_format_arg - handle",,,,,,
[format.arg],"Class template basic_format_arg - pointers",,,,,,
[format.arg.store],"Class template format-arg-store",,Mark de Wever,`D103357 <https://llvm.org/D103357>`__,Review,
[format.formatter.spec],"Formatter specializations - character types",,Mark de Wever,"`D96664 <https://llvm.org/D96664>`__ `D103466 <https://llvm.org/D103466>`__",Review,
[format.formatter.spec],"Formatter specializations - string types",,Mark de Wever,"`D96664 <https://llvm.org/D96664>`__ `D103425 <https://reviews.llvm.org/D103425>`__",Review,
[format.formatter.spec],"Formatter specializations - boolean type",,Mark de Wever,"`D96664 <https://llvm.org/D96664>`__ `D103670 <https://reviews.llvm.org/D103670>`__",Review,
[format.formatter.spec],"Formatter specializations - integral types",,Mark de Wever,"`D96664 <https://llvm.org/D96664>`__ `D103433 <https://reviews.llvm.org/D103433>`__",Review,
[format.formatter.spec],"Formatter specializations - floating-point types",`D70631 <https://llvm.org/D70631>`__,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.formatter.spec],"Formatter specializations - pointer types",,,,,,
[format.string.std],"Standard format specifiers - character types",,Mark de Wever,`D103368 <https://reviews.llvm.org/D103368>`__,Review,
[format.string.std],"Standard format specifiers - string types",`D103379 <https://reviews.llvm.org/D103379>`__,Mark de Wever,"`D103368 <https://reviews.llvm.org/D103368>`__ `D103413 <https://reviews.llvm.org/D103413>`__",Review,
[format.string.std],"Standard format specifiers - boolean type",`D103379 <https://reviews.llvm.org/D103379>`__,Mark de Wever,"`D103368 <https://reviews.llvm.org/D103368>`__ `D103413 <https://reviews.llvm.org/D103413>`__",Review,
[format.string.std],"Standard format specifiers - integral types",,Mark de Wever,`D103368 <https://reviews.llvm.org/D103368>`__,Review,
[format.string.std],"Standard format specifiers - floating-point types",,Mark de Wever,,,,
[format.string.std],"Standard format specifiers - pointer types",,Mark de Wever,,,,
[format.functions],"Format functions - format(string_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - format(wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - format(const locale& loc, string_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - format(const locale& loc, wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - vformat(string_view fmt, format_args args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - vformat(wstring_view fmt, wformat_args args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - vformat(const locale& loc, string_view fmt, format_args args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - vformat(const locale& loc, wstring_view fmt, wformat_args args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - format_to(Out out, wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - format_to(Out out, const locale& loc, wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - vformat_to(Out out, string_view fmt, format_args_t<type_identity_t<Out>, char> args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - vformat_to(Out out, wstring_view fmt, format_args_t<type_identity_t<Out>, char> args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - vformat_to(Out out, const locale& loc, string_view fmt, format_args_t<type_identity_t<Out>, char> args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - vformat_to(Out out, const locale& loc, wstring_view fmt,format_args_t<type_identity_t<Out>, wchar_t> args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - format_to_n(Out out, iter_difference_t<Out> n, string_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - format_to_n(Out out, iter_difference_t<Out> n, wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n, const locale& loc, string_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n, const locale& loc, wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - formatted_size(string_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - formatted_size(wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - formatted_size(const locale& loc, string_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - formatted_size(const locale& loc, wstring_view fmt, const Args&... args);",,Mark de Wever,`D96664 <https://llvm.org/D96664>`__,Review,
[format.functions],"Format functions - Implement locale support",,Mark de Wever,,In progress,,
[format.functions],"Format functions - Improve performance format_to_n",,Mark de Wever,,,,
[format.functions],"Format functions - Improve performance formatted size",,Mark de Wever,,,,

Can't render this file because it has a wrong number of fields in line 9.

View File

@ -31,11 +31,6 @@ Sub-Projects in the One Ranges Proposal
:header-rows: 1
:widths: auto
.. csv-table::
:file: RangesAlgorithms.csv
:header-rows: 1
:widths: auto
Misc. Items and TODOs
====================================
@ -53,4 +48,4 @@ Paper and Issue Status
.. csv-table::
:file: RangesIssues.csv
:header-rows: 1
:widths: auto
:widths: auto

View File

@ -1,100 +0,0 @@
Category,Algorithm,Assignee,CL,Complete
Search,any_of,Christopher Di Bella,`D105793 <https://llvm.org/D105793>`_
Search,all_of,Christopher Di Bella,`D105793 <https://llvm.org/D105793>`_
Search,none_of,Christopher Di Bella,`D105793 <https://llvm.org/D105793>`_
Search,find,Christopher Di Bella,`D105456 <https://llvm.org/D105456>`_
Search,find_if,Christopher Di Bella,`D105792 <https://llvm.org/D105792>`_
Search,find_if_not,Christopher Di Bella,`D105792 <https://llvm.org/D105792>`_
Search,find_first_of,Not assigned,n/a,Not started
Search,adjacent_find,Not assigned,n/a,Not started
Search,mismatch,Not assigned,n/a,Not started
Search,equal,Not assigned,n/a,Not started
Search,lexicographical_compare,Not assigned,n/a,Not started
Search,partition_point,Christopher Di Bella,`D105794 <https://llvm.org/D105794>`_,Under review
Search,lower_bound,Christopher Di Bella,`D105795 <https://llvm.org/D105795>`_,Under review
Search,upper_bound,Christopher Di Bella,`D105795 <https://llvm.org/D105795>`_,Under review
Search,equal_range,Christopher Di Bella,n/a,Not started
Search,binary_search,Christopher Di Bella,n/a,Not started
Search,min,Not assigned,n/a,Not started
Search,max,Not assigned,n/a,Not started
Search,minmax,Not assigned,n/a,Not started
Search,min_element,Not assigned,n/a,Not started
Search,max_element,Not assigned,n/a,Not started
Search,minmax_element,Not assigned,n/a,Not started
Search,count,Not assigned,n/a,Not started
Search,count_if,Not assigned,n/a,Not started
Search,search,Not assigned,n/a,Not started
Search,search_n,Not assigned,n/a,Not started
Search,find_end,Not assigned,n/a,Not started
Read-only,is_partitioned,Christopher Di Bella,`D105794 <https://llvm.org/D105794>`_,Under review
Read-only,is_sorted,Not assigned,n/a,Not started
Read-only,is_sorted_unitl,Not assigned,n/a,Not started
Read-only,includes,Not assigned,n/a,Not started
Read-only,is_heap,Not assigned,n/a,Not started
Read-only,is_heap_until,Not assigned,n/a,Not started
Read-only,clamp,Not assigned,n/a,Not started
Read-only,is_permutation,Not assigned,n/a,Not started
Read-only,for_each,Not assigned,n/a,Not started
Read-only,for_each_n,Not assigned,n/a,Not started
Write,copy,Not assigned,n/a,Not started
Write,copy_if,Not assigned,n/a,Not started
Write,copy_n,Not assigned,n/a,Not started
Write,copy_backward,Not assigned,n/a,Not started
Write,move,Not assigned,n/a,Not started
Write,move_backward,Not assigned,n/a,Not started
Write,fill,Not assigned,n/a,Not started
Write,fill_n,Not assigned,n/a,Not started
Write,transform,Not assigned,n/a,Not started
Write,generate,Not assigned,n/a,Not started
Write,generate_nNot assigned,n/a,Not started
Write,remove_copy,Not assigned,n/a,Not started
Write,remove_copy_if,Not assigned,n/a,Not started
Write,replace,Not assigned,n/a,Not started
Write,replace_if,Not assigned,n/a,Not started
Write,replace_copy,Not assigned,n/a,Not started
Write,replace_copy_if,Not assigned,n/a,Not started
Write,swap_ranges,Not assigned,n/a,Not started
Write,reverse_copy,Not assigned,n/a,Not started
Write,rotate_copy,Not assigned,n/a,Not started
Write,sample,Not assigned,n/a,Not started
Write,unique_copy,Not assigned,n/a,Not started
Write,partition_copy,Not assigned,n/a,Not started
Write,partial_sort_copy,Not assigned,n/a,Not started
Merge,merge,Not assigned,n/a,Not started
Merge,set_difference,Not assigned,n/a,Not started
Merge,set_intersection,Not assigned,n/a,Not started
Merge,set_symmetric_difference,Not assigned,n/a,Not started
Merge,set_union,Not assigned,n/a,Not started
Permutation,remove,Not assigned,n/a,Not started
Permutation,remove_if,Not assigned,n/a,Not started
Permutation,reverse,Not assigned,n/a,Not started
Permutation,rotate,Not assigned,n/a,Not started
Permutation,shuffle,Not assigned,n/a,Not started
Permutation,unique,Not assigned,n/a,Not started
Permutation,partition,Not assigned,n/a,Not started
Permutation,stable_partition,Not assigned,n/a,Not started
Permutation,sort,Not assigned,n/a,Not started
Permutation,stable_sort,Not assigned,n/a,Not started
Permutation,partial_sort,Not assigned,n/a,Not started
Permutation,nth_element,Not assigned,n/a,Not started
Permutation,inplace_merge,Not assigned,n/a,Not started
Permutation,make_heap,Not assigned,n/a,Not started
Permutation,push_heap,Not assigned,n/a,Not started
Permutation,pop_heap,Not assigned,n/a,Not started
Permutation,sort_heap,Not assigned,n/a,Not started
Permutation,prev_permutation,Not assigned,n/a,Not started
Permutation,next_permutation,Not assigned,n/a,Not started
Uninitialised memory,uninitialized_copy,Konstantin Varlamov,`D116023 <https://llvm.org/D116023>`_,✅
Uninitialised memory,uninitialized_copy_n,Konstantin Varlamov,`D116023 <https://llvm.org/D116023>`_,✅
Uninitialised memory,uninitialized_fill,Konstantin Varlamov,`D115626 <https://llvm.org/D115626>`_,✅
Uninitialised memory,uninitialized_fill_n,Konstantin Varlamov,`D115626 <https://llvm.org/D115626>`_,✅
Uninitialised memory,uninitialized_move,Konstantin Varlamov,`D116023 <https://llvm.org/D116023>`_,✅
Uninitialised memory,uninitialized_move_n,Konstantin Varlamov,`D116023 <https://llvm.org/D116023>`_,✅
Uninitialised memory,uninitialized_default_construct,Konstantin Varlamov,`D115315 <https://llvm.org/D115315>`_,✅
Uninitialised memory,uninitialized_default_construct_n,Konstantin Varlamov,`D115315 <https://llvm.org/D115315>`_,✅
Uninitialised memory,uninitialized_value_construct,Konstantin Varlamov,`D115626 <https://llvm.org/D115626>`_,✅
Uninitialised memory,uninitialized_value_construct_n,Konstantin Varlamov,`D115626 <https://llvm.org/D115626>`_,✅
Uninitialised memory,destroy,Konstantin Varlamov,`D116078 <https://llvm.org/D116078>`_,✅
Uninitialised memory,destroy_n,Konstantin Varlamov,`D116078 <https://llvm.org/D116078>`_,✅
Uninitialised memory,destroy_at,Konstantin Varlamov,`D116078 <https://llvm.org/D116078>`_,✅
Uninitialised memory,construct_at,Konstantin Varlamov,`D116078 <https://llvm.org/D116078>`_,✅
1 Category,Algorithm,Assignee,CL,Complete
2 Search,any_of,Christopher Di Bella,`D105793 <https://llvm.org/D105793>`_
3 Search,all_of,Christopher Di Bella,`D105793 <https://llvm.org/D105793>`_
4 Search,none_of,Christopher Di Bella,`D105793 <https://llvm.org/D105793>`_
5 Search,find,Christopher Di Bella,`D105456 <https://llvm.org/D105456>`_
6 Search,find_if,Christopher Di Bella,`D105792 <https://llvm.org/D105792>`_
7 Search,find_if_not,Christopher Di Bella,`D105792 <https://llvm.org/D105792>`_
8 Search,find_first_of,Not assigned,n/a,Not started
9 Search,adjacent_find,Not assigned,n/a,Not started
10 Search,mismatch,Not assigned,n/a,Not started
11 Search,equal,Not assigned,n/a,Not started
12 Search,lexicographical_compare,Not assigned,n/a,Not started
13 Search,partition_point,Christopher Di Bella,`D105794 <https://llvm.org/D105794>`_,Under review
14 Search,lower_bound,Christopher Di Bella,`D105795 <https://llvm.org/D105795>`_,Under review
15 Search,upper_bound,Christopher Di Bella,`D105795 <https://llvm.org/D105795>`_,Under review
16 Search,equal_range,Christopher Di Bella,n/a,Not started
17 Search,binary_search,Christopher Di Bella,n/a,Not started
18 Search,min,Not assigned,n/a,Not started
19 Search,max,Not assigned,n/a,Not started
20 Search,minmax,Not assigned,n/a,Not started
21 Search,min_element,Not assigned,n/a,Not started
22 Search,max_element,Not assigned,n/a,Not started
23 Search,minmax_element,Not assigned,n/a,Not started
24 Search,count,Not assigned,n/a,Not started
25 Search,count_if,Not assigned,n/a,Not started
26 Search,search,Not assigned,n/a,Not started
27 Search,search_n,Not assigned,n/a,Not started
28 Search,find_end,Not assigned,n/a,Not started
29 Read-only,is_partitioned,Christopher Di Bella,`D105794 <https://llvm.org/D105794>`_,Under review
30 Read-only,is_sorted,Not assigned,n/a,Not started
31 Read-only,is_sorted_unitl,Not assigned,n/a,Not started
32 Read-only,includes,Not assigned,n/a,Not started
33 Read-only,is_heap,Not assigned,n/a,Not started
34 Read-only,is_heap_until,Not assigned,n/a,Not started
35 Read-only,clamp,Not assigned,n/a,Not started
36 Read-only,is_permutation,Not assigned,n/a,Not started
37 Read-only,for_each,Not assigned,n/a,Not started
38 Read-only,for_each_n,Not assigned,n/a,Not started
39 Write,copy,Not assigned,n/a,Not started
40 Write,copy_if,Not assigned,n/a,Not started
41 Write,copy_n,Not assigned,n/a,Not started
42 Write,copy_backward,Not assigned,n/a,Not started
43 Write,move,Not assigned,n/a,Not started
44 Write,move_backward,Not assigned,n/a,Not started
45 Write,fill,Not assigned,n/a,Not started
46 Write,fill_n,Not assigned,n/a,Not started
47 Write,transform,Not assigned,n/a,Not started
48 Write,generate,Not assigned,n/a,Not started
49 Write,generate_nNot assigned,n/a,Not started
50 Write,remove_copy,Not assigned,n/a,Not started
51 Write,remove_copy_if,Not assigned,n/a,Not started
52 Write,replace,Not assigned,n/a,Not started
53 Write,replace_if,Not assigned,n/a,Not started
54 Write,replace_copy,Not assigned,n/a,Not started
55 Write,replace_copy_if,Not assigned,n/a,Not started
56 Write,swap_ranges,Not assigned,n/a,Not started
57 Write,reverse_copy,Not assigned,n/a,Not started
58 Write,rotate_copy,Not assigned,n/a,Not started
59 Write,sample,Not assigned,n/a,Not started
60 Write,unique_copy,Not assigned,n/a,Not started
61 Write,partition_copy,Not assigned,n/a,Not started
62 Write,partial_sort_copy,Not assigned,n/a,Not started
63 Merge,merge,Not assigned,n/a,Not started
64 Merge,set_difference,Not assigned,n/a,Not started
65 Merge,set_intersection,Not assigned,n/a,Not started
66 Merge,set_symmetric_difference,Not assigned,n/a,Not started
67 Merge,set_union,Not assigned,n/a,Not started
68 Permutation,remove,Not assigned,n/a,Not started
69 Permutation,remove_if,Not assigned,n/a,Not started
70 Permutation,reverse,Not assigned,n/a,Not started
71 Permutation,rotate,Not assigned,n/a,Not started
72 Permutation,shuffle,Not assigned,n/a,Not started
73 Permutation,unique,Not assigned,n/a,Not started
74 Permutation,partition,Not assigned,n/a,Not started
75 Permutation,stable_partition,Not assigned,n/a,Not started
76 Permutation,sort,Not assigned,n/a,Not started
77 Permutation,stable_sort,Not assigned,n/a,Not started
78 Permutation,partial_sort,Not assigned,n/a,Not started
79 Permutation,nth_element,Not assigned,n/a,Not started
80 Permutation,inplace_merge,Not assigned,n/a,Not started
81 Permutation,make_heap,Not assigned,n/a,Not started
82 Permutation,push_heap,Not assigned,n/a,Not started
83 Permutation,pop_heap,Not assigned,n/a,Not started
84 Permutation,sort_heap,Not assigned,n/a,Not started
85 Permutation,prev_permutation,Not assigned,n/a,Not started
86 Permutation,next_permutation,Not assigned,n/a,Not started
87 Uninitialised memory,uninitialized_copy,Konstantin Varlamov,`D116023 <https://llvm.org/D116023>`_,✅
88 Uninitialised memory,uninitialized_copy_n,Konstantin Varlamov,`D116023 <https://llvm.org/D116023>`_,✅
89 Uninitialised memory,uninitialized_fill,Konstantin Varlamov,`D115626 <https://llvm.org/D115626>`_,✅
90 Uninitialised memory,uninitialized_fill_n,Konstantin Varlamov,`D115626 <https://llvm.org/D115626>`_,✅
91 Uninitialised memory,uninitialized_move,Konstantin Varlamov,`D116023 <https://llvm.org/D116023>`_,✅
92 Uninitialised memory,uninitialized_move_n,Konstantin Varlamov,`D116023 <https://llvm.org/D116023>`_,✅
93 Uninitialised memory,uninitialized_default_construct,Konstantin Varlamov,`D115315 <https://llvm.org/D115315>`_,✅
94 Uninitialised memory,uninitialized_default_construct_n,Konstantin Varlamov,`D115315 <https://llvm.org/D115315>`_,✅
95 Uninitialised memory,uninitialized_value_construct,Konstantin Varlamov,`D115626 <https://llvm.org/D115626>`_,✅
96 Uninitialised memory,uninitialized_value_construct_n,Konstantin Varlamov,`D115626 <https://llvm.org/D115626>`_,✅
97 Uninitialised memory,destroy,Konstantin Varlamov,`D116078 <https://llvm.org/D116078>`_,✅
98 Uninitialised memory,destroy_n,Konstantin Varlamov,`D116078 <https://llvm.org/D116078>`_,✅
99 Uninitialised memory,destroy_at,Konstantin Varlamov,`D116078 <https://llvm.org/D116078>`_,✅
100 Uninitialised memory,construct_at,Konstantin Varlamov,`D116078 <https://llvm.org/D116078>`_,✅

View File

@ -1,11 +1,11 @@
"Number","Name","Status","First released version"
"Number","Name","Status","Assignee"
`P0896R4 <https://wg21.link/P0896R4>`__,<ranges>,,
`P1035R7 <https://wg21.link/P1035R7>`__,Input Range Adaptors,,
`P1207R4 <https://wg21.link/P1207R4>`__,Movability Of Single-Pass Iterators,,
`P1243R4 <https://wg21.link/P1243R4>`__,Rangify New Algorithms,,
`P1248R1 <https://wg21.link/P1248R1>`__,Fixing Relations,|Complete|,13.0
`P1248R1 <https://wg21.link/P1248R1>`__,Fixing Relations,,
`P1252R2 <https://wg21.link/P1252R2>`__,Ranges Design Cleanup,,
`P1391R4 <https://wg21.link/P1391R4>`__,Range Constructor For string_view,|Complete|,14.0
`P1391R4 <https://wg21.link/P1391R4>`__,Range Constructor For string_view,,
`P1456R1 <https://wg21.link/P1456R1>`__,Move-Only Views,,
`P1474R1 <https://wg21.link/P1474R1>`__,Helpful Pointers For contiguous_iterator,,
`P1522R1 <https://wg21.link/P1522R1>`__,Iterator Difference Type And Integer Overflow,,
@ -15,7 +15,7 @@
`P1739R4 <https://wg21.link/P1739R4>`__,Avoiding Template Bloat For Ranges,,
`P1862R1 <https://wg21.link/P1862R1>`__,Range Adaptors For Non-Copyable Iterators,,
`P1870R1 <https://wg21.link/P1870R1>`__,safe_range,,
`P1871R1 <https://wg21.link/P1871R1>`__,disable_sized_sentinel_for,|Complete|,14.0
`P1871R1 <https://wg21.link/P1871R1>`__,disable_sized_sentinel_for,,
`P1878R1 <https://wg21.link/P1878R1>`__,Constraining Readable Types,,
`P1970R2 <https://wg21.link/P1970R2>`__,ranges::ssize,,
`P1983R0 <https://wg21.link/P1983R0>`__,Fixing Minor Ranges Issues,,
@ -26,8 +26,55 @@
`P2325R3 <https://wg21.link/P2325R3>`__,Views should not be required to be default constructible ,,
`P2328R1 <https://wg21.link/P2328R1>`__,join_view should join all views of ranges,,
`P2210R2 <https://wg21.link/P2210R2>`__,Superior String Splitting,,
`P2281R1 <https://wg21.link/P2281R1>`__,Clarifying range adaptor objects,|Complete|,14.0
`P2281R1 <https://wg21.link/P2281R1>`__,Clarifying range adaptor objects,,
`P2367R0 <https://wg21.link/P2367R0>`__,Remove misuses of list-initialization from Clause 24,,
`P2415 <https://wg21.link/P2415>`__,"What is a ``view``",|Complete|,14.0
`P2432 <https://wg21.link/P2432>`__,"Fix ``istream_view``",,
`LWG3169 <https://wg21.link/lwg3169>`__, ranges permutation generators discard useful information,,
`LWG3173 <https://wg21.link/lwg3173>`__, Enable CTAD for ref-view,,
`LWG3179 <https://wg21.link/lwg3179>`__, subrange should always model Range,,
`LWG3180 <https://wg21.link/lwg3180>`__, Inconsistently named return type for ranges::minmax_element,,
`LWG3183 <https://wg21.link/lwg3183>`__, Normative permission to specialize Ranges variable templates,,
`LWG3186 <https://wg21.link/lwg3186>`__, "ranges removal, partition, and partial_sort_copy algorithms discard useful information",,
`LWG3191 <https://wg21.link/lwg3191>`__, std::ranges::shuffle synopsis does not match algorithm definition,,
`LWG3276 <https://wg21.link/lwg3276>`__, Class split_view::outer_iterator::value_type should inherit from view_interface,,
`LWG3280 <https://wg21.link/lwg3280>`__, View converting constructors can cause constraint recursion and are unneeded,,
`LWG3281 <https://wg21.link/lwg3281>`__, Conversion from pair-like types to subrange is a silent semantic promotion,,
`LWG3282 <https://wg21.link/lwg3282>`__, subrange converting constructor should disallow derived to base conversions,,
`LWG3286 <https://wg21.link/lwg3286>`__, ranges::size is not required to be valid after a call to ranges::begin on an input range,,
`LWG3291 <https://wg21.link/lwg3291>`__, iota_view::iterator has the wrong iterator_category,,
`LWG3292 <https://wg21.link/lwg3292>`__, iota_view is under-constrained,,
`LWG3299 <https://wg21.link/lwg3299>`__, Pointers don't need customized iterator behavior,,
`LWG3301 <https://wg21.link/lwg3301>`__, transform_view::iterator has incorrect iterator_category,,
`LWG3302 <https://wg21.link/lwg3302>`__, Range adaptor objects keys and values are unspecified,,
`LWG3313 <https://wg21.link/lwg3313>`__, join_view::iterator::operator-- is incorrectly constrained,,
`LWG3323 <https://wg21.link/lwg3323>`__, has-tuple-element helper concept needs convertible_to,,
`LWG3325 <https://wg21.link/lwg3325>`__, Constrain return type of transformation function for transform_view,,
`LWG3335 <https://wg21.link/lwg3335>`__, range_size_t and views::all_t,,
`LWG3355 <https://wg21.link/lwg3355>`__, The memory algorithms should support move-only input iterators introduced by P1207,,
`LWG3363 <https://wg21.link/lwg3363>`__, drop_while_view should opt-out of sized_range,,
`LWG3364 <https://wg21.link/lwg3364>`__, Initialize data members of ranges and their iterators,,
`LWG3381 <https://wg21.link/lwg3381>`__, begin and data must agree for contiguous_range,,
`LWG3384 <https://wg21.link/lwg3384>`__, transform_view::sentinel has an incorrect operator-,,
`LWG3385 <https://wg21.link/lwg3385>`__, common_iterator is not sufficiently constrained for non-copyable iterators,,
`LWG3387 <https://wg21.link/lwg3387>`__, [range.reverse.view] reverse_view<V> unintentionally requires range<const V>,,
`LWG3388 <https://wg21.link/lwg3388>`__, view iterator types have ill-formed <=> operators,,
`LWG3389 <https://wg21.link/lwg3389>`__, A move-only iterator still does not have a counted_iterator,,
`LWG3397 <https://wg21.link/lwg3397>`__, ranges::basic_istream_view::iterator should not provide iterator_category,,
`LWG3398 <https://wg21.link/lwg3398>`__, tuple_element_t is also wrong for const subrange,,
`LWG3474 <https://wg21.link/lwg3474>`__, Nesting join_views is broken because of CTAD,,
`LWG3481 <https://wg21.link/LWG3481>`__,"viewable_range mishandles lvalue move-only views",,
`LWG3500 <https://wg21.link/lwg3500>`__, join_view::iterator::operator->() is bogus,,
`LWG3505 <https://wg21.link/lwg3505>`__, split_view::outer-iterator::operator++ misspecified,,
`LWG3517 <https://wg21.link/LWG3517>`__,"join_view::iterator's iter_swap is underconstrained",,
`LWG3520 <https://wg21.link/LWG3520>`__,"iter_move and iter_swap are inconsistent for transform_view::iterator",,
`LWG3522 <https://wg21.link/LWG3522>`__,"Missing requirement on InputIterator template parameter for priority_queue constructors",,
`LWG3523 <https://wg21.link/LWG3523>`__,"iota_view::sentinel is not always iota_view's sentinel",,
`LWG3532 <https://wg21.link/LWG3532>`__,"split_view<V, P>::inner-iterator<true>::operator++(int) should depend on Base",,
`LWG3533 <https://wg21.link/LWG3533>`__,"Make base() const & consistent across iterator wrappers that supports input_iterators",,
`LWG3541 <https://wg21.link/LWG3541>`__,"indirectly_readable_traits should be SFINAE-friendly for all types",,
`LWG3543 <https://wg21.link/LWG3543>`__,"Definition of when counted_iterators refer to the same sequence isn't quite right",,
`LWG3546 <https://wg21.link/LWG3546>`__,"common_iterator's postfix-proxy is not quite right",,
`LWG3549 <https://wg21.link/LWG3549>`__,"view_interface is overspecified to derive from view_base",,
`LWG3551 <https://wg21.link/LWG3551>`__,"borrowed_{iterator,subrange}_t are overspecified",,
`LWG3553 <https://wg21.link/LWG3553>`__,"Useless constraint in split_view::outer-iterator::value_type::begin()",,
`LWG3555 <https://wg21.link/LWG3555>`__,"{transform,elements}_view::iterator::iterator_concept should consider const-qualification of the underlying range",,

1 Number Name Status First released version Assignee
2 `P0896R4 <https://wg21.link/P0896R4>`__ <ranges>
3 `P1035R7 <https://wg21.link/P1035R7>`__ Input Range Adaptors
4 `P1207R4 <https://wg21.link/P1207R4>`__ Movability Of Single-Pass Iterators
5 `P1243R4 <https://wg21.link/P1243R4>`__ Rangify New Algorithms
6 `P1248R1 <https://wg21.link/P1248R1>`__ Fixing Relations |Complete| 13.0
7 `P1252R2 <https://wg21.link/P1252R2>`__ Ranges Design Cleanup
8 `P1391R4 <https://wg21.link/P1391R4>`__ Range Constructor For string_view |Complete| 14.0
9 `P1456R1 <https://wg21.link/P1456R1>`__ Move-Only Views
10 `P1474R1 <https://wg21.link/P1474R1>`__ Helpful Pointers For contiguous_iterator
11 `P1522R1 <https://wg21.link/P1522R1>`__ Iterator Difference Type And Integer Overflow
15 `P1739R4 <https://wg21.link/P1739R4>`__ Avoiding Template Bloat For Ranges
16 `P1862R1 <https://wg21.link/P1862R1>`__ Range Adaptors For Non-Copyable Iterators
17 `P1870R1 <https://wg21.link/P1870R1>`__ safe_range
18 `P1871R1 <https://wg21.link/P1871R1>`__ disable_sized_sentinel_for |Complete| 14.0
19 `P1878R1 <https://wg21.link/P1878R1>`__ Constraining Readable Types
20 `P1970R2 <https://wg21.link/P1970R2>`__ ranges::ssize
21 `P1983R0 <https://wg21.link/P1983R0>`__ Fixing Minor Ranges Issues
26 `P2328R1 <https://wg21.link/P2328R1>`__ join_view should join all views of ranges
27 `P2210R2 <https://wg21.link/P2210R2>`__ Superior String Splitting
28 `P2281R1 <https://wg21.link/P2281R1>`__ Clarifying range adaptor objects |Complete| 14.0
29 `P2367R0 <https://wg21.link/P2367R0>`__ Remove misuses of list-initialization from Clause 24
30 `P2415 <https://wg21.link/P2415>`__ `LWG3169 <https://wg21.link/lwg3169>`__ What is a ``view`` ranges permutation generators discard useful information |Complete| 14.0
31 `P2432 <https://wg21.link/P2432>`__ `LWG3173 <https://wg21.link/lwg3173>`__ Fix ``istream_view`` Enable CTAD for ref-view
32 `LWG3179 <https://wg21.link/lwg3179>`__ subrange should always model Range
33 `LWG3180 <https://wg21.link/lwg3180>`__ Inconsistently named return type for ranges::minmax_element
34 `LWG3183 <https://wg21.link/lwg3183>`__ Normative permission to specialize Ranges variable templates
35 `LWG3186 <https://wg21.link/lwg3186>`__ ranges removal, partition, and partial_sort_copy algorithms discard useful information
36 `LWG3191 <https://wg21.link/lwg3191>`__ std::ranges::shuffle synopsis does not match algorithm definition
37 `LWG3276 <https://wg21.link/lwg3276>`__ Class split_view::outer_iterator::value_type should inherit from view_interface
38 `LWG3280 <https://wg21.link/lwg3280>`__ View converting constructors can cause constraint recursion and are unneeded
39 `LWG3281 <https://wg21.link/lwg3281>`__ Conversion from pair-like types to subrange is a silent semantic promotion
40 `LWG3282 <https://wg21.link/lwg3282>`__ subrange converting constructor should disallow derived to base conversions
41 `LWG3286 <https://wg21.link/lwg3286>`__ ranges::size is not required to be valid after a call to ranges::begin on an input range
42 `LWG3291 <https://wg21.link/lwg3291>`__ iota_view::iterator has the wrong iterator_category
43 `LWG3292 <https://wg21.link/lwg3292>`__ iota_view is under-constrained
44 `LWG3299 <https://wg21.link/lwg3299>`__ Pointers don't need customized iterator behavior
45 `LWG3301 <https://wg21.link/lwg3301>`__ transform_view::iterator has incorrect iterator_category
46 `LWG3302 <https://wg21.link/lwg3302>`__ Range adaptor objects keys and values are unspecified
47 `LWG3313 <https://wg21.link/lwg3313>`__ join_view::iterator::operator-- is incorrectly constrained
48 `LWG3323 <https://wg21.link/lwg3323>`__ has-tuple-element helper concept needs convertible_to
49 `LWG3325 <https://wg21.link/lwg3325>`__ Constrain return type of transformation function for transform_view
50 `LWG3335 <https://wg21.link/lwg3335>`__ range_size_t and views::all_t
51 `LWG3355 <https://wg21.link/lwg3355>`__ The memory algorithms should support move-only input iterators introduced by P1207
52 `LWG3363 <https://wg21.link/lwg3363>`__ drop_while_view should opt-out of sized_range
53 `LWG3364 <https://wg21.link/lwg3364>`__ Initialize data members of ranges and their iterators
54 `LWG3381 <https://wg21.link/lwg3381>`__ begin and data must agree for contiguous_range
55 `LWG3384 <https://wg21.link/lwg3384>`__ transform_view::sentinel has an incorrect operator-
56 `LWG3385 <https://wg21.link/lwg3385>`__ common_iterator is not sufficiently constrained for non-copyable iterators
57 `LWG3387 <https://wg21.link/lwg3387>`__ [range.reverse.view] reverse_view<V> unintentionally requires range<const V>
58 `LWG3388 <https://wg21.link/lwg3388>`__ view iterator types have ill-formed <=> operators
59 `LWG3389 <https://wg21.link/lwg3389>`__ A move-only iterator still does not have a counted_iterator
60 `LWG3397 <https://wg21.link/lwg3397>`__ ranges::basic_istream_view::iterator should not provide iterator_category
61 `LWG3398 <https://wg21.link/lwg3398>`__ tuple_element_t is also wrong for const subrange
62 `LWG3474 <https://wg21.link/lwg3474>`__ Nesting join_views is broken because of CTAD
63 `LWG3481 <https://wg21.link/LWG3481>`__ viewable_range mishandles lvalue move-only views
64 `LWG3500 <https://wg21.link/lwg3500>`__ join_view::iterator::operator->() is bogus
65 `LWG3505 <https://wg21.link/lwg3505>`__ split_view::outer-iterator::operator++ misspecified
66 `LWG3517 <https://wg21.link/LWG3517>`__ join_view::iterator's iter_swap is underconstrained
67 `LWG3520 <https://wg21.link/LWG3520>`__ iter_move and iter_swap are inconsistent for transform_view::iterator
68 `LWG3522 <https://wg21.link/LWG3522>`__ Missing requirement on InputIterator template parameter for priority_queue constructors
69 `LWG3523 <https://wg21.link/LWG3523>`__ iota_view::sentinel is not always iota_view's sentinel
70 `LWG3532 <https://wg21.link/LWG3532>`__ split_view<V, P>::inner-iterator<true>::operator++(int) should depend on Base
71 `LWG3533 <https://wg21.link/LWG3533>`__ Make base() const & consistent across iterator wrappers that supports input_iterators
72 `LWG3541 <https://wg21.link/LWG3541>`__ indirectly_readable_traits should be SFINAE-friendly for all types
73 `LWG3543 <https://wg21.link/LWG3543>`__ Definition of when counted_iterators refer to the same sequence isn't quite right
74 `LWG3546 <https://wg21.link/LWG3546>`__ common_iterator's postfix-proxy is not quite right
75 `LWG3549 <https://wg21.link/LWG3549>`__ view_interface is overspecified to derive from view_base
76 `LWG3551 <https://wg21.link/LWG3551>`__ borrowed_{iterator,subrange}_t are overspecified
77 `LWG3553 <https://wg21.link/LWG3553>`__ Useless constraint in split_view::outer-iterator::value_type::begin()
78 `LWG3555 <https://wg21.link/LWG3555>`__ {transform,elements}_view::iterator::iterator_concept should consider const-qualification of the underlying range
79
80

View File

@ -1,42 +1,42 @@
Section,Description,Dependencies,Assignee,Complete
`[tuple.helper] <https://wg21.link/tuple.helper>`_,Update <tuple> includes.,None,Konstantin Varlamov,Not started
`[range.cmp] <https://wg21.link/range.cmp>`_,"| `ranges::equal_to <https://llvm.org/D100429>`_
[tuple.helper],Update <tuple> includes.,None,Unassigned,Not started
`[range.cmp] <http://wg21.link/range.cmp>`_,"| `ranges::equal_to <https://llvm.org/D100429>`_
| `ranges::not_equal_to <https://llvm.org/D100429>`_
| `ranges::less <https://llvm.org/D100429>`_
| `ranges::greater <https://llvm.org/D100429>`_
| `ranges::less_equal <https://llvm.org/D100429>`_
| `ranges::greater_equal <https://llvm.org/D100429>`_",None,Zoe Carver,✅
`[readable.traits] <https://wg21.link/readable.traits>`_,"| `indirectly_readable_traits <https://llvm.org/D99461>`_
`[readable.traits] <http://wg21.link/readable.traits>`_,"| `indirectly_readable_traits <https://llvm.org/D99461>`_
| `iter_value_t <https://llvm.org/D99863>`_",None,Christopher Di Bella,✅
`[incrementable.traits] <https://wg21.link/incrementable.traits>`_,"| `incrementable_traits <https://llvm.org/D99141>`_
`[incrementable.traits] <http://wg21.link/incrementable.traits>`_,"| `incrementable_traits <https://llvm.org/D99141>`_
| `iter_difference_t <https://llvm.org/D99863>`_",,Christopher Di Bella,✅
`[iterator.traits] <https://wg21.link/iterator.traits>`_,`Updates to iterator_traits <https://llvm.org/D99855>`_,"| indirectly_readable_traits
`[iterator.traits] <http://wg21.link/iterator.traits>`_,`Updates to iterator_traits <https://llvm.org/D99855>`_,"| indirectly_readable_traits
| incrementable_traits",Christopher Di Bella,✅
`[special.mem.concepts] <https://wg21.link/special.mem.concepts>`_,"| `nothrow-input-iterator <https://llvm.org/D114761>`_
| `nothrow-sentinel-for <https://llvm.org/D114761>`_
| `nothrow-input-range <https://llvm.org/D114761>`_
| `nothrow-forward-iterator <https://llvm.org/D114761>`_
| `nothrow-forward-range <https://llvm.org/D114761>`_","| [iterator.concepts]
| [range.refinements]",Konstantin Varlamov,✅
`[specialized.algorithms] <https://wg21.link/specialized.algorithms>`_,"| `ranges::uninitialized_default_construct <https://llvm.org/D115315>`_
| `ranges::uninitialized_default_construct_n <https://llvm.org/D115315>`_
| `ranges::uninitialized_value_construct <https://llvm.org/D115626>`_
| `ranges::uninitialized_value_construct_n <https://llvm.org/D115626>`_
| `ranges::uninitialized_copy <https://llvm.org/D116023>`_
| `ranges::uninitialized_copy_n <https://llvm.org/D116023>`_
| `ranges::uninitialized_move <https://llvm.org/D116023>`_
| `ranges::uninitialized_move_n <https://llvm.org/D116023>`_
| `ranges::uninitialized_fill <https://llvm.org/D115626>`_
| `ranges::uninitialized_fill_n <https://llvm.org/D115626>`_
| `ranges::construct_at <https://llvm.org/D116078>`_
| `ranges::destroy <https://llvm.org/D116078>`_
| `ranges::destroy_at <https://llvm.org/D116078>`_
| `ranges::destroy_n <https://llvm.org/D116078>`_",[special.mem.concepts],Konstantin Varlamov,✅
`[strings] <https://wg21.link/strings>`_,Adds begin/end and updates const_iterator.,[iterator.concepts],Unassigned,Not started
`[views.span] <https://wg21.link/views.span>`_,Same as [strings],[iterator.concepts],Unassigned,Not started
`[iterator.cust.move] <https://wg21.link/iterator.cust.move>`_,`ranges::iter_move <https://llvm.org/D99873>`_,,Zoe Carver,✅
`[iterator.cust.swap] <https://wg21.link/iterator.cust.swap>`_,`ranges::iter_swap <https://llvm.org/D102809>`_,iter_value_t,Zoe Carver,✅
`[iterator.concepts] <https://wg21.link/iterator.concepts>`_,"| `indirectly_readable <https://llvm.org/D100073>`_
`[special.mem.concepts] <http://wg21.link/special.mem.concepts>`_,"| *no-throw-input-iterator*
| *no-throw-sentinel-for*
| *no-throw-input-range*
| *no-throw-forward-iterator*
| *no-throw-forward-range*","| [iterator.concepts]
| [range.refinements]",Unassigned,Not started
`[specialized.algorithms] <http://wg21.link/specialized.algorithms>`_,"| ranges::uninitialized_default_construct
| ranges::uninitialized_default_construct_n
| ranges::uninitialized_value_construct
| ranges::uninitialized_value_construct_n
| ranges::uninitialized_copy
| ranges::uninitialized_copy_n
| ranges::uninitialized_move
| ranges::uninitialized_move_n
| ranges::uninitialized_fill
| ranges::uninitialized_fill_n
| ranges::construct_at
| ranges::destroy
| ranges::destroy_at
| ranges::destroy_n",[special.mem.concepts],Unassigned,Not started
[strings],Adds begin/end and updates const_iterator.,[iterator.concepts],Unassigned,Not started
[views.span],Same as [strings],[iterator.concepts],Unassigned,Not started
`[iterator.cust.move] <http://wg21.link/iterator.cust.move>`_,`ranges::iter_move <https://llvm.org/D99873>`_,,Zoe Carver,✅
`[iterator.cust.swap] <http://wg21.link/iterator.cust.swap>`_,`ranges::iter_swap <https://llvm.org/D102809>`_,iter_value_t,Zoe Carver,✅
`[iterator.concepts] <http://wg21.link/iterator.concepts>`_,"| `indirectly_readable <https://llvm.org/D100073>`_
| `indirectly_writable <https://llvm.org/D100073>`_
| `weakly_incrementable <https://llvm.org/D100080>`_
| `incrementable <https://llvm.org/D100080>`_
@ -49,52 +49,42 @@ Section,Description,Dependencies,Assignee,Complete
| `bidirectional_iterator <https://llvm.org/D100278>`_
| `random_access_iterator <https://llvm.org/D101316>`_
| `contiguous_iterator <https://llvm.org/D101396>`_",,Various,✅
`[indirectcallable.indirectinvocable] <https://wg21.link/indirectcallable.indirectinvocable>`_,"
| `indirectly_unary_invocable <https://llvm.org/D101277>`_
`[indirectcallable.indirectinvocable] <http://wg21.link/indirectcallable.indirectinvocable>`_,"| indirectly_unary_invocable
| `indirectly_regular_unary_invocable <https://llvm.org/D101277>`_
| `indirectly_unary_predicate <https://llvm.org/D101277>`_
| `indirectly_binary_predicate <https://llvm.org/D101277>`_
| `indirectly_equivalence_relation <https://llvm.org/D101277>`_
| `indirectly_strict_weak_order <https://llvm.org/D101277>`_",[readable.traits],Louis Dionne,✅
`[projected] <https://wg21.link/projected>`_,`ranges::projected <https://llvm.org/D101277>`_,[iterator.concepts],Louis Dionne,✅
`[common.alg.req] <https://wg21.link/common.alg.req>`_: pt. 1,"| `indirectly_movable <https://llvm.org/D102639>`_
`[projected] <http://wg21.link/projected>`_,`ranges::projected <https://llvm.org/D101277>`_,[iterator.concepts],Louis Dionne,✅
`[common.alg.req] <http://wg21.link/common.alg.req>`_: pt. 1,"| `indirectly_movable <https://llvm.org/D102639>`_
| `indirectly_movable_storable <https://llvm.org/D102639>`_
| indirectly_copyable
| indirectly_copyable_storable",[iterator.concepts],Zoe Carver,In progress
`[common.alg.req] <https://wg21.link/common.alg.req>`_: pt. 2,`indirectly_swappable <https://llvm.org/D105304>`_,"| [iterator.concepts]
[common.alg.req]: pt. 2,indirectly_swappable,"| [iterator.concepts]
| [iterator.cust.swap]",Zoe Carver,✅
`[common.alg.req] <https://wg21.link/common.alg.req>`_: pt. 3,`indirectly_comparable <https://llvm.org/D116268>`_,[projected],Nikolas Klauser,✅
`[common.alg.req] <https://wg21.link/common.alg.req>`_: pt. 4,"| permutable
[common.alg.req]: pt. 3,indirectly_comparable,[projected],Louis Dionne,Not started
[common.alg.req]: pt. 4,"| permutable
| mergeable
| sortable",[iterator.concepts],Unassigned,Not started
`[std.iterator.tags] <https://wg21.link/std.iterator.tags>`_,,[iterator.traits],Unassigned,Not started
`[range.iter.ops] <https://wg21.link/range.iter.ops>`_,"| `ranges::advance <https://llvm.org/D101922>`_
[std.iterator.tags],,[iterator.traits],Unassigned,Not started
`[range.iter.ops] <http://wg21.link/range.iter.ops>`_,"| `ranges::advance <https://llvm.org/D101922>`_
| `ranges::distance <https://llvm.org/D102789>`_
| `ranges::next <https://llvm.org/D102563>`_
| `ranges::prev <https://llvm.org/D102564>`_",[iterator.concepts],Christopher Di Bella and Arthur O'Dwyer,✅
`[predef.iterators] <https://wg21.link/predef.iterators>`_,"
| Updates to reverse_iterator
| Updates to back_insert_iterator
| Updates to front_insert_iterator
| Updates to move_iterator","| [iterator.concepts]
| `ranges::prev <https://llvm.org/D102564>`_",[iterator.concepts],Christopher Di Bella,In progress
[predef.iterators],Updates to predefined iterators.,"| [iterator.concepts]
| [iterator.cust.swap]
| [iterator.cust.move]",Unassigned,Not started
`[move.sentinel] <https://wg21.link/move.sentinel>`_,move_sentinel,[predef.iterators],Unassigned,Not started
`[common.iterator] <https://wg21.link/common.iterator>`_,`common_iterator <https://llvm.org/D103335>`_,"| [iterator.concepts]
[move.sentinel],,[predef.iterators],Unassigned,Not started
[common.iterator],,"| [iterator.concepts]
| [iterator.cust.swap]
| [iterator.cust.move]",Zoe Carver,✅
`[default.sentinel] <https://wg21.link/default.sentinel>`_,`std::default_sentinel_t <https://llvm.org/D103487>`_,No dependencies,Zoe Carver,✅
`[counted.iterator] <https://wg21.link/counted.iterator>`_,`counted_iterator <https://llvm.org/D106205>`_,"| [iterator.concepts]
[default.sentinels],std::default_sentinel_t.,No dependencies,Zoe Carver,✅
[counted.iterator],,"| [iterator.concepts]
| [iterator.cust.swap]
| [iterator.cust.move]
| [default.sentinels]",Zoe Carver,✅
`[stream.iterators] <https://wg21.link/stream.iterators>`_,"
| Updates to istream_iterator
| Updates to ostream_iterator
| Updates to istreambuf_iterator
| Updates to ostreambuf_iterator
",[default.sentinels],Unassigned,Not started
`[range.access] <https://wg21.link/range.access>`_,"| `ranges::begin <https://llvm.org/D100255>`_
[stream.iterators],,[default.sentinels],Unassigned,Not started
`[range.access] <http://wg21.link/range.access>`_,"| `ranges::begin <https://llvm.org/D100255>`_
| `ranges::end <https://llvm.org/D100255>`_
| `range::cbegin <https://llvm.org/D100255>`_
| `ranges::cend <https://llvm.org/D100255>`_
@ -106,8 +96,8 @@ Section,Description,Dependencies,Assignee,Complete
| `ranges::ssize <https://llvm.org/D101189>`_
| `ranges::empty <https://llvm.org/D101193>`_
| `ranges::data <https://llvm.org/D101476>`_
| `ranges::cdata <https://llvm.org/D117044>`_",[iterator.concepts],Christopher Di Bella and Zoe Carver,In progress
`[range.range] <https://wg21.link/range.range>`_,"| `ranges::range <https://llvm.org/D100269>`_
| ranges::cdata",[iterator.concepts],Christopher Di Bella and Zoe Carver,In progress
`[range.range] <http://wg21.link/range.range>`_,"| `ranges::range <https://llvm.org/D100269>`_
| `ranges::borrowed_range <https://llvm.org/D102426>`_
| `ranges::enable_borrowed_range <https://llvm.org/D90999>`_
| `ranges::iterator_t <https://llvm.org/D100255>`_
@ -117,43 +107,43 @@ Section,Description,Dependencies,Assignee,Complete
| `ranges::range_value_t <https://llvm.org/D100269>`_
| `ranges::range_reference_t <https://llvm.org/D100269>`_
| `ranges::range_rvalue_reference_t <https://llvm.org/D100269>`_",[range.access],Christopher Di Bella,✅
`[range.sized] <https://wg21.link/range.sized>`_,"| `ranges::sized_range <https://llvm.org/D102434>`_
`[range.sized] <http://wg21.link/range.sized>`_,"| `ranges::sized_range <https://llvm.org/D102434>`_
| `ranges::disable_sized_range <https://llvm.org/D102434>`_","| [range.primitives]
| [range.range]",Christopher Di Bella,✅
`[range.view] <https://wg21.link/range.view>`_,"| `ranges::enable_view <https://llvm.org/D101547>`_
`[range.view] <http://wg21.link/range.view>`_,"| `ranges::enable_view <https://llvm.org/D101547>`_
| `ranges::view_base <https://llvm.org/D101547>`_
| `ranges::view <https://llvm.org/D101547>`_",[range.range],Louis Dionne,✅
`[range.refinements] <https://wg21.link/range.refinements>`_,"| `ranges::output_range <https://llvm.org/D106704>`_
`[range.refinements] <http://wg21.link/range.refinements>`_,"| ranges::output_range
| `ranges::input_range <https://llvm.org/D100271>`_
| `ranges::forward_range <https://llvm.org/D100275>`_
| `ranges::forward_range: `D100275 <https://llvm.org/D100275>`_
| `ranges::bidirectional_range <https://llvm.org/D100278>`_
| `ranges::random_access_range <https://llvm.org/D101316>`_
| `ranges::contiguous_range <https://llvm.org/D104262>`_
| ranges::contiguous_range
| `ranges::common_range <https://llvm.org/D100269>`_",[range.range],Christopher Di Bella,✅
`[range.refinements]`_,`ranges::viewable_range <https://llvm.org/D105816>`_,[range.range],Louis Dionne,✅
`[range.utility.helpers] <https://wg21.link/range.utility.helpers>`_,"| `simple-view <https://llvm.org/D103493>`_
| `has-arrow <https://llvm.org/D103493>`_
| `not-same-as <https://llvm.org/D103493>`_","| [range.range]
`[range.utility.helpers] <http://wg21.link/range.utility.helpers>`_,"| *simple-view*
| *has-arrow*
| *not-same-as*","| [range.range]
| [iterator.concept.input]",Zoe Carver,✅
`[view.interface] <https://wg21.link/view.interface>`_,"`ranges::view_interface <https://llvm.org/D101737>`_","| [ranges.range]
`[view.interface] <http://wg21.link/view.interface>`_,"`ranges::view_interface <https://llvm.org/D101737>`_","| [ranges.range]
| [range.view]
| [range.iterator.op.prev]
| [range.refinements]",Zoe Carver,✅
`[range.subrange] <https://wg21.link/range.subrange>`_,`ranges::subrange <https://llvm.org/D102006>`_,[view.interface],Zoe Carver,✅
`[range.dangling] <https://wg21.link/range.dangling>`_,"| `ranges::dangling <https://llvm.org/D105205>`_
| `ranges::borrowed_iterator_t <https://llvm.org/D105205>`_
| `ranges::borrowed_subrange_t <https://llvm.org/D105205>`_","| [range.range]
`[range.subrange] <http://wg21.link/range.subrange>`_,`ranges::subrange <https://llvm.org/D102006>`_,[view.interface],Zoe Carver,✅
`[range.dangling] <http://wg21.link/range.dangling>`_,"| ranges::dangling
| ranges::borrowed_iterator_t
| ranges::borrowed_subrange_t","| [range.range]
| [range.subrange]",Christopher Di Bella,✅
`[range.empty] <https://wg21.link/range.empty>`_,`empty_view <https://llvm.org/D103208>`_,[view.interface],Zoe Carver,✅
`[range.single] <https://wg21.link/range.single>`_,`single_view <https://llvm.org/D106840>`_,[view.interface],Zoe Carver,✅
`[range.iota] <https://wg21.link/range.iota>`_,`iota_view <https://llvm.org/D107396>`_,[range.all],Zoe Carver,✅
`[range.all] <https://wg21.link/range.all>`_,`view::all <https://llvm.org/D102028>`_,"[range.subrange], [range.view.ref]",Zoe Carver,✅
`[range.ref.view] <https://wg21.link/range.ref.view>`_,`ref_view <https://llvm.org/D102020>`_,[view.interface],Zoe Carver,✅
`[range.filter] <https://wg21.link/range.filter>`_,`filter_view <https://llvm.org/D109086>`_,[range.all],Louis Dionne,Under review
`[range.transform] <https://wg21.link/range.transform>`_,`transform_view <https://llvm.org/D103056>`_,[range.all],Zoe Carver,✅
`[range.take] <https://wg21.link/range.take>`_,`take_view <https://llvm.org/D106507>`_,[range.all],Zoe Carver,✅
`[range.join] <https://wg21.link/range.join>`_,`join_view <https://llvm.org/D107671>`_,[range.all],Zoe Carver,✅
`[range.split] <https://wg21.link/range.split>`_,`split_view <https://llvm.org/D107500>`_,[range.all],Zoe Carver,In progress
`[range.counted] <https://wg21.link/range.counted>`_,`view::counted <https://llvm.org/D106923>`_,[range.subrange],Zoe Carver,✅
`[range.common] <https://wg21.link/range.common>`_,`common_view <https://llvm.org/D105753>`_,[range.all],Zoe Carver,✅
`[range.reverse] <https://wg21.link/range.reverse>`_,`reverse_view <https://llvm.org/D107096>`_,[range.all],Zoe Carver,✅
`[range.all] <http://wg21.link/range.all>`_,`view::all <https://llvm.org/D102028>`_,"[range.subrange], [range.view.ref]",Zoe Carver,✅
`[range.view.ref] <http://wg21.link/range.view>`_,`ref-view <https://llvm.org/D102020>`_,[view.interface],Zoe Carver,✅
`[range.filter] <http://wg21.link/range.filter>`_,filter_view,[range.all],Louis Dionne,Not started
`[range.transform] <http://wg21.link/range.transform>`_,`transform_view <https://llvm.org/D103056>`_,[range.all],Zoe Carver,✅
`[range.iota] <http://wg21.link/range.iota>`_,iota_view,[range.all],Louis Dionne,Not started
`[range.take] <http://wg21.link/range.take>`_,take_view,[range.all],Zoe Carver,In Progress
`[range.join] <http://wg21.link/range.join>`_,join_view,[range.all],Christopher Di Bella,Not started
`[range.empty] <http://wg21.link/range.empty>`_,`empty_view <https://llvm.org/D103208>`_,[view.interface],Zoe Carver,✅
`[range.single] <http://wg21.link/range.single>`_,single_view,[view.interface],Zoe Carver,In Progress
`[range.split] <http://wg21.link/range.split>`_,split_view,[range.all],Unassigned,Not started
`[range.counted] <http://wg21.link/range.counted>`_,view::counted,[range.subrange],Zoe Carver,Not started
`[range.common] <http://wg21.link/range.common>`_,common_view,[range.all],Zoe Carver,✅
`[range.reverse] <http://wg21.link/range.reverse>`_,reverse_view,[range.all],Unassigned,Not started

1 Section Description Dependencies Assignee Complete
2 `[tuple.helper] <https://wg21.link/tuple.helper>`_ [tuple.helper] Update <tuple> includes. None Konstantin Varlamov Unassigned Not started
3 `[range.cmp] <https://wg21.link/range.cmp>`_ `[range.cmp] <http://wg21.link/range.cmp>`_ | `ranges::equal_to <https://llvm.org/D100429>`_ | `ranges::not_equal_to <https://llvm.org/D100429>`_ | `ranges::less <https://llvm.org/D100429>`_ | `ranges::greater <https://llvm.org/D100429>`_ | `ranges::less_equal <https://llvm.org/D100429>`_ | `ranges::greater_equal <https://llvm.org/D100429>`_ None Zoe Carver
4 `[readable.traits] <https://wg21.link/readable.traits>`_ `[readable.traits] <http://wg21.link/readable.traits>`_ | `indirectly_readable_traits <https://llvm.org/D99461>`_ | `iter_value_t <https://llvm.org/D99863>`_ None Christopher Di Bella
5 `[incrementable.traits] <https://wg21.link/incrementable.traits>`_ `[incrementable.traits] <http://wg21.link/incrementable.traits>`_ | `incrementable_traits <https://llvm.org/D99141>`_ | `iter_difference_t <https://llvm.org/D99863>`_ Christopher Di Bella
6 `[iterator.traits] <https://wg21.link/iterator.traits>`_ `[iterator.traits] <http://wg21.link/iterator.traits>`_ `Updates to iterator_traits <https://llvm.org/D99855>`_ | indirectly_readable_traits | incrementable_traits Christopher Di Bella
7 `[special.mem.concepts] <https://wg21.link/special.mem.concepts>`_ `[special.mem.concepts] <http://wg21.link/special.mem.concepts>`_ | `nothrow-input-iterator <https://llvm.org/D114761>`_ | `nothrow-sentinel-for <https://llvm.org/D114761>`_ | `nothrow-input-range <https://llvm.org/D114761>`_ | `nothrow-forward-iterator <https://llvm.org/D114761>`_ | `nothrow-forward-range <https://llvm.org/D114761>`_ | *no-throw-input-iterator* | *no-throw-sentinel-for* | *no-throw-input-range* | *no-throw-forward-iterator* | *no-throw-forward-range* | [iterator.concepts] | [range.refinements] Konstantin Varlamov Unassigned Not started
8 `[specialized.algorithms] <https://wg21.link/specialized.algorithms>`_ `[specialized.algorithms] <http://wg21.link/specialized.algorithms>`_ | `ranges::uninitialized_default_construct <https://llvm.org/D115315>`_ | `ranges::uninitialized_default_construct_n <https://llvm.org/D115315>`_ | `ranges::uninitialized_value_construct <https://llvm.org/D115626>`_ | `ranges::uninitialized_value_construct_n <https://llvm.org/D115626>`_ | `ranges::uninitialized_copy <https://llvm.org/D116023>`_ | `ranges::uninitialized_copy_n <https://llvm.org/D116023>`_ | `ranges::uninitialized_move <https://llvm.org/D116023>`_ | `ranges::uninitialized_move_n <https://llvm.org/D116023>`_ | `ranges::uninitialized_fill <https://llvm.org/D115626>`_ | `ranges::uninitialized_fill_n <https://llvm.org/D115626>`_ | `ranges::construct_at <https://llvm.org/D116078>`_ | `ranges::destroy <https://llvm.org/D116078>`_ | `ranges::destroy_at <https://llvm.org/D116078>`_ | `ranges::destroy_n <https://llvm.org/D116078>`_ | ranges::uninitialized_default_construct | ranges::uninitialized_default_construct_n | ranges::uninitialized_value_construct | ranges::uninitialized_value_construct_n | ranges::uninitialized_copy | ranges::uninitialized_copy_n | ranges::uninitialized_move | ranges::uninitialized_move_n | ranges::uninitialized_fill | ranges::uninitialized_fill_n | ranges::construct_at | ranges::destroy | ranges::destroy_at | ranges::destroy_n [special.mem.concepts] Konstantin Varlamov Unassigned Not started
9 `[strings] <https://wg21.link/strings>`_ [strings] Adds begin/end and updates const_iterator. [iterator.concepts] Unassigned Not started
10 `[views.span] <https://wg21.link/views.span>`_ [views.span] Same as [strings] [iterator.concepts] Unassigned Not started
11 `[iterator.cust.move] <https://wg21.link/iterator.cust.move>`_ `[iterator.cust.move] <http://wg21.link/iterator.cust.move>`_ `ranges::iter_move <https://llvm.org/D99873>`_ Zoe Carver
12 `[iterator.cust.swap] <https://wg21.link/iterator.cust.swap>`_ `[iterator.cust.swap] <http://wg21.link/iterator.cust.swap>`_ `ranges::iter_swap <https://llvm.org/D102809>`_ iter_value_t Zoe Carver
13 `[iterator.concepts] <https://wg21.link/iterator.concepts>`_ `[iterator.concepts] <http://wg21.link/iterator.concepts>`_ | `indirectly_readable <https://llvm.org/D100073>`_ | `indirectly_writable <https://llvm.org/D100073>`_ | `weakly_incrementable <https://llvm.org/D100080>`_ | `incrementable <https://llvm.org/D100080>`_ | `input_or_output_iterator <https://llvm.org/D100160>`_ | `sentinel_for <https://llvm.org/D100160>`_ | `sized_sentinel_for <https://llvm.org/D101371>`_ | `input_iterator <https://llvm.org/D100271>`_ | `output_iterator <https://llvm.org/D106704>`_ | `forward_iterator <https://llvm.org/D100275>`_ | `bidirectional_iterator <https://llvm.org/D100278>`_ | `random_access_iterator <https://llvm.org/D101316>`_ | `contiguous_iterator <https://llvm.org/D101396>`_ Various
14 `[indirectcallable.indirectinvocable] <https://wg21.link/indirectcallable.indirectinvocable>`_ `[indirectcallable.indirectinvocable] <http://wg21.link/indirectcallable.indirectinvocable>`_ | `indirectly_unary_invocable <https://llvm.org/D101277>`_ | `indirectly_regular_unary_invocable <https://llvm.org/D101277>`_ | `indirectly_unary_predicate <https://llvm.org/D101277>`_ | `indirectly_binary_predicate <https://llvm.org/D101277>`_ | `indirectly_equivalence_relation <https://llvm.org/D101277>`_ | `indirectly_strict_weak_order <https://llvm.org/D101277>`_ | indirectly_unary_invocable | `indirectly_regular_unary_invocable <https://llvm.org/D101277>`_ | `indirectly_unary_predicate <https://llvm.org/D101277>`_ | `indirectly_binary_predicate <https://llvm.org/D101277>`_ | `indirectly_equivalence_relation <https://llvm.org/D101277>`_ | `indirectly_strict_weak_order <https://llvm.org/D101277>`_ [readable.traits] Louis Dionne
15 `[projected] <https://wg21.link/projected>`_ `[projected] <http://wg21.link/projected>`_ `ranges::projected <https://llvm.org/D101277>`_ [iterator.concepts] Louis Dionne
16 `[common.alg.req] <https://wg21.link/common.alg.req>`_: pt. 1 `[common.alg.req] <http://wg21.link/common.alg.req>`_: pt. 1 | `indirectly_movable <https://llvm.org/D102639>`_ | `indirectly_movable_storable <https://llvm.org/D102639>`_ | indirectly_copyable | indirectly_copyable_storable [iterator.concepts] Zoe Carver In progress
17 `[common.alg.req] <https://wg21.link/common.alg.req>`_: pt. 2 [common.alg.req]: pt. 2 `indirectly_swappable <https://llvm.org/D105304>`_ indirectly_swappable | [iterator.concepts] | [iterator.cust.swap] Zoe Carver
18 `[common.alg.req] <https://wg21.link/common.alg.req>`_: pt. 3 [common.alg.req]: pt. 3 `indirectly_comparable <https://llvm.org/D116268>`_ indirectly_comparable [projected] Nikolas Klauser Louis Dionne Not started
19 `[common.alg.req] <https://wg21.link/common.alg.req>`_: pt. 4 [common.alg.req]: pt. 4 | permutable | mergeable | sortable [iterator.concepts] Unassigned Not started
20 `[std.iterator.tags] <https://wg21.link/std.iterator.tags>`_ [std.iterator.tags] [iterator.traits] Unassigned Not started
21 `[range.iter.ops] <https://wg21.link/range.iter.ops>`_ `[range.iter.ops] <http://wg21.link/range.iter.ops>`_ | `ranges::advance <https://llvm.org/D101922>`_ | `ranges::distance <https://llvm.org/D102789>`_ | `ranges::next <https://llvm.org/D102563>`_ | `ranges::prev <https://llvm.org/D102564>`_ [iterator.concepts] Christopher Di Bella and Arthur O'Dwyer Christopher Di Bella In progress
22 `[predef.iterators] <https://wg21.link/predef.iterators>`_ [predef.iterators] | Updates to reverse_iterator | Updates to back_insert_iterator | Updates to front_insert_iterator | Updates to move_iterator Updates to predefined iterators. | [iterator.concepts] | [iterator.cust.swap] | [iterator.cust.move] Unassigned Not started
23 `[move.sentinel] <https://wg21.link/move.sentinel>`_ [move.sentinel] move_sentinel [predef.iterators] Unassigned Not started
24 `[common.iterator] <https://wg21.link/common.iterator>`_ [common.iterator] `common_iterator <https://llvm.org/D103335>`_ | [iterator.concepts] | [iterator.cust.swap] | [iterator.cust.move] Zoe Carver
25 `[default.sentinel] <https://wg21.link/default.sentinel>`_ [default.sentinels] `std::default_sentinel_t <https://llvm.org/D103487>`_ std::default_sentinel_t. No dependencies Zoe Carver
26 `[counted.iterator] <https://wg21.link/counted.iterator>`_ [counted.iterator] `counted_iterator <https://llvm.org/D106205>`_ | [iterator.concepts] | [iterator.cust.swap] | [iterator.cust.move] | [default.sentinels] Zoe Carver
27 `[stream.iterators] <https://wg21.link/stream.iterators>`_ [stream.iterators] | Updates to istream_iterator | Updates to ostream_iterator | Updates to istreambuf_iterator | Updates to ostreambuf_iterator [default.sentinels] Unassigned Not started
28 `[range.access] <https://wg21.link/range.access>`_ `[range.access] <http://wg21.link/range.access>`_ | `ranges::begin <https://llvm.org/D100255>`_ | `ranges::end <https://llvm.org/D100255>`_ | `range::cbegin <https://llvm.org/D100255>`_ | `ranges::cend <https://llvm.org/D100255>`_ | ranges::rbegin | ranges::rend | ranges::crbegin | ranges::crend | `ranges::size <https://llvm.org/D101079>`_ | `ranges::ssize <https://llvm.org/D101189>`_ | `ranges::empty <https://llvm.org/D101193>`_ | `ranges::data <https://llvm.org/D101476>`_ | `ranges::cdata <https://llvm.org/D117044>`_ | `ranges::begin <https://llvm.org/D100255>`_ | `ranges::end <https://llvm.org/D100255>`_ | `range::cbegin <https://llvm.org/D100255>`_ | `ranges::cend <https://llvm.org/D100255>`_ | ranges::rbegin | ranges::rend | ranges::crbegin | ranges::crend | `ranges::size <https://llvm.org/D101079>`_ | `ranges::ssize <https://llvm.org/D101189>`_ | `ranges::empty <https://llvm.org/D101193>`_ | `ranges::data <https://llvm.org/D101476>`_ | ranges::cdata [iterator.concepts] Christopher Di Bella and Zoe Carver In progress
29 `[range.range] <https://wg21.link/range.range>`_ `[range.range] <http://wg21.link/range.range>`_ | `ranges::range <https://llvm.org/D100269>`_ | `ranges::borrowed_range <https://llvm.org/D102426>`_ | `ranges::enable_borrowed_range <https://llvm.org/D90999>`_ | `ranges::iterator_t <https://llvm.org/D100255>`_ | `ranges::sentinel_t <https://llvm.org/D100269>`_ | `ranges::range_difference_t <https://llvm.org/D100269>`_ | `ranges::range_size_t <https://llvm.org/D106708>`_ | `ranges::range_value_t <https://llvm.org/D100269>`_ | `ranges::range_reference_t <https://llvm.org/D100269>`_ | `ranges::range_rvalue_reference_t <https://llvm.org/D100269>`_ [range.access] Christopher Di Bella
30 `[range.sized] <https://wg21.link/range.sized>`_ `[range.sized] <http://wg21.link/range.sized>`_ | `ranges::sized_range <https://llvm.org/D102434>`_ | `ranges::disable_sized_range <https://llvm.org/D102434>`_ | [range.primitives] | [range.range] Christopher Di Bella
31 `[range.view] <https://wg21.link/range.view>`_ `[range.view] <http://wg21.link/range.view>`_ | `ranges::enable_view <https://llvm.org/D101547>`_ | `ranges::view_base <https://llvm.org/D101547>`_ | `ranges::view <https://llvm.org/D101547>`_ [range.range] Louis Dionne
32 `[range.refinements] <https://wg21.link/range.refinements>`_ `[range.refinements] <http://wg21.link/range.refinements>`_ | `ranges::output_range <https://llvm.org/D106704>`_ | `ranges::input_range <https://llvm.org/D100271>`_ | `ranges::forward_range <https://llvm.org/D100275>`_ | `ranges::bidirectional_range <https://llvm.org/D100278>`_ | `ranges::random_access_range <https://llvm.org/D101316>`_ | `ranges::contiguous_range <https://llvm.org/D104262>`_ | `ranges::common_range <https://llvm.org/D100269>`_ | ranges::output_range | `ranges::input_range <https://llvm.org/D100271>`_ | `ranges::forward_range: `D100275 <https://llvm.org/D100275>`_ | `ranges::bidirectional_range <https://llvm.org/D100278>`_ | `ranges::random_access_range <https://llvm.org/D101316>`_ | ranges::contiguous_range | `ranges::common_range <https://llvm.org/D100269>`_ [range.range] Christopher Di Bella
33 `[range.refinements]`_ `ranges::viewable_range <https://llvm.org/D105816>`_ [range.range] Louis Dionne
34 `[range.utility.helpers] <https://wg21.link/range.utility.helpers>`_ `[range.utility.helpers] <http://wg21.link/range.utility.helpers>`_ | `simple-view <https://llvm.org/D103493>`_ | `has-arrow <https://llvm.org/D103493>`_ | `not-same-as <https://llvm.org/D103493>`_ | *simple-view* | *has-arrow* | *not-same-as* | [range.range] | [iterator.concept.input] Zoe Carver
35 `[view.interface] <https://wg21.link/view.interface>`_ `[view.interface] <http://wg21.link/view.interface>`_ `ranges::view_interface <https://llvm.org/D101737>`_ | [ranges.range] | [range.view] | [range.iterator.op.prev] | [range.refinements] Zoe Carver
36 `[range.subrange] <https://wg21.link/range.subrange>`_ `[range.subrange] <http://wg21.link/range.subrange>`_ `ranges::subrange <https://llvm.org/D102006>`_ [view.interface] Zoe Carver
37 `[range.dangling] <https://wg21.link/range.dangling>`_ `[range.dangling] <http://wg21.link/range.dangling>`_ | `ranges::dangling <https://llvm.org/D105205>`_ | `ranges::borrowed_iterator_t <https://llvm.org/D105205>`_ | `ranges::borrowed_subrange_t <https://llvm.org/D105205>`_ | ranges::dangling | ranges::borrowed_iterator_t | ranges::borrowed_subrange_t | [range.range] | [range.subrange] Christopher Di Bella
38 `[range.empty] <https://wg21.link/range.empty>`_ `[range.all] <http://wg21.link/range.all>`_ `empty_view <https://llvm.org/D103208>`_ `view::all <https://llvm.org/D102028>`_ [view.interface] [range.subrange], [range.view.ref] Zoe Carver
39 `[range.single] <https://wg21.link/range.single>`_ `[range.view.ref] <http://wg21.link/range.view>`_ `single_view <https://llvm.org/D106840>`_ `ref-view <https://llvm.org/D102020>`_ [view.interface] Zoe Carver
40 `[range.iota] <https://wg21.link/range.iota>`_ `[range.filter] <http://wg21.link/range.filter>`_ `iota_view <https://llvm.org/D107396>`_ filter_view [range.all] Zoe Carver Louis Dionne Not started
41 `[range.all] <https://wg21.link/range.all>`_ `[range.transform] <http://wg21.link/range.transform>`_ `view::all <https://llvm.org/D102028>`_ `transform_view <https://llvm.org/D103056>`_ [range.subrange], [range.view.ref] [range.all] Zoe Carver
42 `[range.ref.view] <https://wg21.link/range.ref.view>`_ `[range.iota] <http://wg21.link/range.iota>`_ `ref_view <https://llvm.org/D102020>`_ iota_view [view.interface] [range.all] Zoe Carver Louis Dionne Not started
49 `[range.common] <https://wg21.link/range.common>`_ `[range.common] <http://wg21.link/range.common>`_ `common_view <https://llvm.org/D105753>`_ common_view [range.all] Zoe Carver
50 `[range.reverse] <https://wg21.link/range.reverse>`_ `[range.reverse] <http://wg21.link/range.reverse>`_ `reverse_view <https://llvm.org/D107096>`_ reverse_view [range.all] Zoe Carver Unassigned Not started
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
96
97
98
99
100
101
102
103
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149

View File

@ -1,53 +0,0 @@
.. spaceship-status:
==============================================
libc++ Spaceship Operator Status (operator<=>)
==============================================
.. include:: ../Helpers/Styles.rst
.. contents::
:local:
Overview
================================
This document contains the status of the C++20 spaceship operator support
in libc++. It is used to track both the status of the sub-projects of the effort
and who is assigned to these sub-projects. This is imperative to effective
implementation so that work is not duplicated and implementors are not blocked
by each other.
If you are interested in contributing to this effort, please send a message
to the #libcxx channel in the LLVM discord. Please *do not* start working on any
of the assigned items below.
Sub-Projects in the Implementation Effort
=========================================
.. csv-table::
:file: SpaceshipProjects.csv
:header-rows: 1
:widths: auto
.. note::
.. [#note-strongorder] ``std::strong_order(long double, long double)`` is not yet implemented.
Misc. Items and TODOs
====================================
(Note: files with required updates will contain the TODO at the beginning of the
list item so they can be easily found via global search.)
Paper and Issue Status
====================================
.. csv-table::
:file: SpaceshipPapers.csv
:header-rows: 1
:widths: auto

View File

@ -1,10 +0,0 @@
"Number","Name","Status","First released version"
`P1614R2 <https://wg21.link/P1614>`_,The Mothership has Landed,|In Progress|,
`P2404R0 <https://wg21.link/P2404>`_,"Relaxing equality_comparable_with's, totally_ordered_with's, and three_way_comparable_with's common reference requirements to support move-only types",,
`P2405R0 <https://wg21.link/P2405>`_,nullopt_t and nullptr_t should both have operator<=> and operator==,,
`LWG3330 <https://wg21.link/LWG3330>`_,Include <compare> from most library headers,"|Complete|","13.0"
`LWG3347 <https://wg21.link/LWG3347>`_,"std::pair<T, U> now requires T and U to be less-than-comparable",|Nothing To Do|,
`LWG3350 <https://wg21.link/LWG3350>`_,Simplify return type of lexicographical_compare_three_way,|Nothing To Do|,
`LWG3360 <https://wg21.link/LWG3360>`_,three_way_comparable_with is inconsistent with similar concepts,|Nothing To Do|,
`LWG3380 <https://wg21.link/LWG3380>`_,common_type and comparison categories,|Nothing To Do|,
`LWG3395 <https://wg21.link/LWG3395>`_,Definition for three-way comparison needs to be updated,|Nothing To Do|,
1 Number Name Status First released version
2 `P1614R2 <https://wg21.link/P1614>`_ The Mothership has Landed |In Progress|
3 `P2404R0 <https://wg21.link/P2404>`_ Relaxing equality_comparable_with's, totally_ordered_with's, and three_way_comparable_with's common reference requirements to support move-only types
4 `P2405R0 <https://wg21.link/P2405>`_ nullopt_t and nullptr_t should both have operator<=> and operator==
5 `LWG3330 <https://wg21.link/LWG3330>`_ Include <compare> from most library headers |Complete| 13.0
6 `LWG3347 <https://wg21.link/LWG3347>`_ std::pair<T, U> now requires T and U to be less-than-comparable |Nothing To Do|
7 `LWG3350 <https://wg21.link/LWG3350>`_ Simplify return type of lexicographical_compare_three_way |Nothing To Do|
8 `LWG3360 <https://wg21.link/LWG3360>`_ three_way_comparable_with is inconsistent with similar concepts |Nothing To Do|
9 `LWG3380 <https://wg21.link/LWG3380>`_ common_type and comparison categories |Nothing To Do|
10 `LWG3395 <https://wg21.link/LWG3395>`_ Definition for three-way comparison needs to be updated |Nothing To Do|

View File

@ -1,82 +0,0 @@
Section,Description,Dependencies,Assignee,Complete
| `[cmp.concept] <https://wg21.link/cmp.concept>`_,"| `three_way_comparable <https://reviews.llvm.org/D103478>`_
| `three_way_comparable_with <https://reviews.llvm.org/D103478>`_",None,Ruslan Arutyunyan,|Complete|
| `[cmp.result] <https://wg21.link/cmp.result>`_,| `compare_three_way_result <https://reviews.llvm.org/D103581>`_,None,Arthur O'Dwyer,|Complete|
| `[expos.only.func] <https://wg21.link/expos.only.func>`_,"| `synth-three-way <https://reviews.llvm.org/D107721>`_
| `synth-three-way-result <https://reviews.llvm.org/D107721>`_",[cmp.concept],Kent Ross,|Complete|
| `[comparisons.three.way] <https://wg21.link/comparisons.three.way>`_,| `compare_three_way <https://reviews.llvm.org/D80899>`_,[cmp.concept],Arthur O'Dwyer,|Complete|
| `[cmp.alg] <https://wg21.link/cmp.alg>`_,"| `strong_order <https://reviews.llvm.org/D110738>`_
| `weak_order <https://reviews.llvm.org/D110738>`_
| `partial_order <https://reviews.llvm.org/D110738>`_
| `strong_order_fallback <https://reviews.llvm.org/D111514>`_
| `weak_order_fallback <https://reviews.llvm.org/D111514>`_
| `partial_order_fallback <https://reviews.llvm.org/D111514>`_",None,Arthur O'Dwyer,|Complete| [#note-strongorder]_
| `[alg.three.way] <https://wg21.link/alg.three.way>`_,| `lexicographical_compare_three_way <https://reviews.llvm.org/D80902>`_,[comparisons.three.way],Christopher Di Bella,|In Progress|
| `[coroutine.handle.compare] <https://wg21.link/coroutine.handle.compare>`_,| `coroutine_handle <https://reviews.llvm.org/D109433>`_,[comparisons.three.way],Chuanqi Xu,|Complete|
| `[pairs.spec] <https://wg21.link/pairs.spec>`_,| `pair <https://reviews.llvm.org/D107721>`_,[expos.only.func],Kent Ross,|Complete|
| `[syserr.errcat.nonvirtuals] <https://wg21.link/syserr.errcat.nonvirtuals>`_,| error_category,[comparisons.three.way],Unassigned,|Not Started|
| `[syserr.compare] <https://wg21.link/syserr.compare>`_,"| error_code
| error_condition",None,Unassigned,|Not Started|
| `[tuple.rel] <https://wg21.link/tuple.rel>`_,| `tuple <https://reviews.llvm.org/D108250>`_,[expos.only.func],Kent Ross,|Complete|
"| `[optional.relops] <https://wg21.link/optional.relops>`_
| `[optional.nullops] <https://wg21.link/optional.nullops>`_
| `[optional.comp.with.t] <https://wg21.link/optional.comp.with.t>`_","| optional
| nullopt",None,Kent Ross,|In Progress|
"| `[variant.relops] <https://wg21.link/variant.relops>`_
| `[variant.monostate.relops] <https://wg21.link/variant.monostate.relops>`_","| monostate
| variant",None,Kent Ross,|In Progress|
| `[unique.ptr.special] <https://wg21.link/unique.ptr.special>`_,| unique_ptr,[comparisons.three.way],Unassigned,|Not Started|
| `[util.smartptr.shared.cmp] <https://wg21.link/util.smartptr.shared.cmp>`_,| shared_ptr,[comparisons.three.way],Unassigned,|Not Started|
| `[type.index.members] <https://wg21.link/type.index.members>`_,| type_index,None,Unassigned,|Not Started|
| `[charconv.syn] <https://wg21.link/charconv.syn>`_,| to_chars_result,None,Mark de Wever,|Complete|
| `[charconv.syn] <https://wg21.link/charconv.syn>`_,| from_chars_result,None,Mark de Wever,|Complete|
| `[stacktrace.entry.cmp] <https://wg21.link/stacktrace.entry.cmp>`_,| stacktrace_entry,None,Unassigned,|Not Started|
| `[stacktrace.basic.cmp] <https://wg21.link/stacktrace.basic.cmp>`_,| basic_stacktrace,[alg.three.way],Unassigned,|Not Started|
| `[string.cmp] <https://wg21.link/string.cmp>`_,| `basic_string <https://reviews.llvm.org/D80895>`_,None,Christopher Di Bella,|In Progress|
| `[string.view.comparison] <https://wg21.link/string.view.comparison>`_,| `basic_string_view <https://reviews.llvm.org/D80891>`_,None,Christopher Di Bella,|In Progress|
| `[array.syn] <https://wg21.link/array.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_),| array,[expos.only.func],Unassigned,|Not Started|
| `[deque.syn] <https://wg21.link/deque.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_),| deque,[expos.only.func],Unassigned,|Not Started|
| `[forward.list.syn] <https://wg21.link/forward.list.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_),| forward_list,[expos.only.func],Unassigned,|Not Started|
| `[list.syn] <https://wg21.link/list.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_),| list,[expos.only.func],Unassigned,|Not Started|
| `[vector.syn] <https://wg21.link/vector.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_),| vector,[expos.only.func],Unassigned,|Not Started|
| `[associative.map.syn] <https://wg21.link/associative.map.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_),"| map
| multimap",[expos.only.func],Unassigned,|Not Started|
| `[associative.set.syn] <https://wg21.link/associative.set.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_),"| multiset
| set",[expos.only.func],Unassigned,|Not Started|
| `[queue.ops] <https://wg21.link/queue.ops>`_,| queue,None,Unassigned,|Not Started|
| `[stack.ops] <https://wg21.link/stack.ops>`_,| stack,None,Unassigned,|Not Started|
| `[reverse.iter.cmp] <https://wg21.link/reverse.iter.cmp>`_,| reverse_iterator,None,Mikhail Maltsev,|Complete|
| `[move.iter.op.comp] <https://wg21.link/move.iter.op.comp>`_,| move_iterator,None,Unassigned,|Not Started|
| `[counted.iter.cmp] <https://wg21.link/counted.iter.cmp>`_,| counted_iterator,None,Unassigned,|Not Started|
| `[range.iota.iterator] <https://wg21.link/range.iota.iterator>`_,| ranges::iota_view::iterator,[concepts.cmp],Unassigned,|Not Started|
| `[range.transform.iterator] <https://wg21.link/range.transform.iterator>`_,| ranges::transform_view::iterator,[concepts.cmp],Unassigned,|Not Started|
| `[range.elements.iterator] <https://wg21.link/range.elements.iterator>`_,| ranges::elements_view::iterator,[concepts.cmp],Unassigned,|Not Started|
"| `[time.duration.comparisons] <https://wg21.link/time.duration.comparisons>`_
| `[time.point.comparisons] <https://wg21.link/time.point.comparisons>`_
| `[time.cal.day.nonmembers] <https://wg21.link/time.cal.day.nonmembers>`_
| `[time.cal.month.nonmembers] <https://wg21.link/time.cal.month.nonmembers>`_
| `[time.cal.year.nonmembers] <https://wg21.link/time.cal.year.nonmembers>`_
| `[time.cal.md.nonmembers] <https://wg21.link/time.cal.md.nonmembers>`_
| `[time.cal.mdlast] <https://wg21.link/time.cal.mdlast>`_
| `[time.cal.ym.nonmembers] <https://wg21.link/time.cal.ym.nonmembers>`_
| `[time.cal.ymd.nonmembers] <https://wg21.link/time.cal.ymd.nonmembers>`_
| `[time.cal.ymdlast.nonmembers] <https://wg21.link/time.cal.ymdlast.nonmembers>`_
| `[time.zone.nonmembers] <https://wg21.link/time.zone.nonmembers>`_
| `[time.zone.leap.nonmembers] <https://wg21.link/time.zone.leap.nonmembers>`_
| `[time.zone.link.nonmembers] <https://wg21.link/time.zone.link.nonmembers>`_","| chrono::duration
| chrono::time_point
| chrono::day
| chrono::month
| chrono::year
| chrono::month_day
| chrono::month_day_last
| chrono::year_month
| chrono::year_month_day
| chrono::year_month_day_last
| chrono::time_zone
| chrono::leap_second
| chrono::time_zone_link",None,Unassigned,|Not Started|
| `[fs.path.nonmember] <https://wg21.link/fs.path.nonmember>`_,| filesystem::path,None,Unassigned,|Not Started|
| `[fs.dir.entry.obs] <https://wg21.link/fs.dir.entry.obs>`_,| filesystem::directory_entry,None,Unassigned,|Not Started|
| `[re.submatch.op] <https://wg21.link/re.submatch.op>`_,| sub_match,None,Unassigned,|Not Started|
| `[thread.thread.id] <https://wg21.link/thread.thread.id>`_,| thread::id,None,Unassigned,|Not Started|
1 Section Description Dependencies Assignee Complete
2 | `[cmp.concept] <https://wg21.link/cmp.concept>`_ | `three_way_comparable <https://reviews.llvm.org/D103478>`_ | `three_way_comparable_with <https://reviews.llvm.org/D103478>`_ None Ruslan Arutyunyan |Complete|
3 | `[cmp.result] <https://wg21.link/cmp.result>`_ | `compare_three_way_result <https://reviews.llvm.org/D103581>`_ None Arthur O'Dwyer |Complete|
4 | `[expos.only.func] <https://wg21.link/expos.only.func>`_ | `synth-three-way <https://reviews.llvm.org/D107721>`_ | `synth-three-way-result <https://reviews.llvm.org/D107721>`_ [cmp.concept] Kent Ross |Complete|
5 | `[comparisons.three.way] <https://wg21.link/comparisons.three.way>`_ | `compare_three_way <https://reviews.llvm.org/D80899>`_ [cmp.concept] Arthur O'Dwyer |Complete|
6 | `[cmp.alg] <https://wg21.link/cmp.alg>`_ | `strong_order <https://reviews.llvm.org/D110738>`_ | `weak_order <https://reviews.llvm.org/D110738>`_ | `partial_order <https://reviews.llvm.org/D110738>`_ | `strong_order_fallback <https://reviews.llvm.org/D111514>`_ | `weak_order_fallback <https://reviews.llvm.org/D111514>`_ | `partial_order_fallback <https://reviews.llvm.org/D111514>`_ None Arthur O'Dwyer |Complete| [#note-strongorder]_
7 | `[alg.three.way] <https://wg21.link/alg.three.way>`_ | `lexicographical_compare_three_way <https://reviews.llvm.org/D80902>`_ [comparisons.three.way] Christopher Di Bella |In Progress|
8 | `[coroutine.handle.compare] <https://wg21.link/coroutine.handle.compare>`_ | `coroutine_handle <https://reviews.llvm.org/D109433>`_ [comparisons.three.way] Chuanqi Xu |Complete|
9 | `[pairs.spec] <https://wg21.link/pairs.spec>`_ | `pair <https://reviews.llvm.org/D107721>`_ [expos.only.func] Kent Ross |Complete|
10 | `[syserr.errcat.nonvirtuals] <https://wg21.link/syserr.errcat.nonvirtuals>`_ | error_category [comparisons.three.way] Unassigned |Not Started|
11 | `[syserr.compare] <https://wg21.link/syserr.compare>`_ | error_code | error_condition None Unassigned |Not Started|
12 | `[tuple.rel] <https://wg21.link/tuple.rel>`_ | `tuple <https://reviews.llvm.org/D108250>`_ [expos.only.func] Kent Ross |Complete|
13 | `[optional.relops] <https://wg21.link/optional.relops>`_ | `[optional.nullops] <https://wg21.link/optional.nullops>`_ | `[optional.comp.with.t] <https://wg21.link/optional.comp.with.t>`_ | optional | nullopt None Kent Ross |In Progress|
14 | `[variant.relops] <https://wg21.link/variant.relops>`_ | `[variant.monostate.relops] <https://wg21.link/variant.monostate.relops>`_ | monostate | variant None Kent Ross |In Progress|
15 | `[unique.ptr.special] <https://wg21.link/unique.ptr.special>`_ | unique_ptr [comparisons.three.way] Unassigned |Not Started|
16 | `[util.smartptr.shared.cmp] <https://wg21.link/util.smartptr.shared.cmp>`_ | shared_ptr [comparisons.three.way] Unassigned |Not Started|
17 | `[type.index.members] <https://wg21.link/type.index.members>`_ | type_index None Unassigned |Not Started|
18 | `[charconv.syn] <https://wg21.link/charconv.syn>`_ | to_chars_result None Mark de Wever |Complete|
19 | `[charconv.syn] <https://wg21.link/charconv.syn>`_ | from_chars_result None Mark de Wever |Complete|
20 | `[stacktrace.entry.cmp] <https://wg21.link/stacktrace.entry.cmp>`_ | stacktrace_entry None Unassigned |Not Started|
21 | `[stacktrace.basic.cmp] <https://wg21.link/stacktrace.basic.cmp>`_ | basic_stacktrace [alg.three.way] Unassigned |Not Started|
22 | `[string.cmp] <https://wg21.link/string.cmp>`_ | `basic_string <https://reviews.llvm.org/D80895>`_ None Christopher Di Bella |In Progress|
23 | `[string.view.comparison] <https://wg21.link/string.view.comparison>`_ | `basic_string_view <https://reviews.llvm.org/D80891>`_ None Christopher Di Bella |In Progress|
24 | `[array.syn] <https://wg21.link/array.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_) | array [expos.only.func] Unassigned |Not Started|
25 | `[deque.syn] <https://wg21.link/deque.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_) | deque [expos.only.func] Unassigned |Not Started|
26 | `[forward.list.syn] <https://wg21.link/forward.list.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_) | forward_list [expos.only.func] Unassigned |Not Started|
27 | `[list.syn] <https://wg21.link/list.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_) | list [expos.only.func] Unassigned |Not Started|
28 | `[vector.syn] <https://wg21.link/vector.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_) | vector [expos.only.func] Unassigned |Not Started|
29 | `[associative.map.syn] <https://wg21.link/associative.map.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_) | map | multimap [expos.only.func] Unassigned |Not Started|
30 | `[associative.set.syn] <https://wg21.link/associative.set.syn>`_ (`general <https://wg21.link/container.requirements.general#14>`_) | multiset | set [expos.only.func] Unassigned |Not Started|
31 | `[queue.ops] <https://wg21.link/queue.ops>`_ | queue None Unassigned |Not Started|
32 | `[stack.ops] <https://wg21.link/stack.ops>`_ | stack None Unassigned |Not Started|
33 | `[reverse.iter.cmp] <https://wg21.link/reverse.iter.cmp>`_ | reverse_iterator None Mikhail Maltsev |Complete|
34 | `[move.iter.op.comp] <https://wg21.link/move.iter.op.comp>`_ | move_iterator None Unassigned |Not Started|
35 | `[counted.iter.cmp] <https://wg21.link/counted.iter.cmp>`_ | counted_iterator None Unassigned |Not Started|
36 | `[range.iota.iterator] <https://wg21.link/range.iota.iterator>`_ | ranges::iota_view::iterator [concepts.cmp] Unassigned |Not Started|
37 | `[range.transform.iterator] <https://wg21.link/range.transform.iterator>`_ | ranges::transform_view::iterator [concepts.cmp] Unassigned |Not Started|
38 | `[range.elements.iterator] <https://wg21.link/range.elements.iterator>`_ | ranges::elements_view::iterator [concepts.cmp] Unassigned |Not Started|
39 | `[time.duration.comparisons] <https://wg21.link/time.duration.comparisons>`_ | `[time.point.comparisons] <https://wg21.link/time.point.comparisons>`_ | `[time.cal.day.nonmembers] <https://wg21.link/time.cal.day.nonmembers>`_ | `[time.cal.month.nonmembers] <https://wg21.link/time.cal.month.nonmembers>`_ | `[time.cal.year.nonmembers] <https://wg21.link/time.cal.year.nonmembers>`_ | `[time.cal.md.nonmembers] <https://wg21.link/time.cal.md.nonmembers>`_ | `[time.cal.mdlast] <https://wg21.link/time.cal.mdlast>`_ | `[time.cal.ym.nonmembers] <https://wg21.link/time.cal.ym.nonmembers>`_ | `[time.cal.ymd.nonmembers] <https://wg21.link/time.cal.ymd.nonmembers>`_ | `[time.cal.ymdlast.nonmembers] <https://wg21.link/time.cal.ymdlast.nonmembers>`_ | `[time.zone.nonmembers] <https://wg21.link/time.zone.nonmembers>`_ | `[time.zone.leap.nonmembers] <https://wg21.link/time.zone.leap.nonmembers>`_ | `[time.zone.link.nonmembers] <https://wg21.link/time.zone.link.nonmembers>`_ | chrono::duration | chrono::time_point | chrono::day | chrono::month | chrono::year | chrono::month_day | chrono::month_day_last | chrono::year_month | chrono::year_month_day | chrono::year_month_day_last | chrono::time_zone | chrono::leap_second | chrono::time_zone_link None Unassigned |Not Started|
40 | `[fs.path.nonmember] <https://wg21.link/fs.path.nonmember>`_ | filesystem::path None Unassigned |Not Started|
41 | `[fs.dir.entry.obs] <https://wg21.link/fs.dir.entry.obs>`_ | filesystem::directory_entry None Unassigned |Not Started|
42 | `[re.submatch.op] <https://wg21.link/re.submatch.op>`_ | sub_match None Unassigned |Not Started|
43 | `[thread.thread.id] <https://wg21.link/thread.thread.id>`_ | thread::id None Unassigned |Not Started|

View File

@ -1,29 +0,0 @@
.. zip-status:
===========================
libc++ Zip Status (P2321R2)
===========================
.. include:: ../Helpers/Styles.rst
.. contents::
:local:
Overview
========
This document contains the status of the C++2b zip implementation in libc++.
It is used to track both the status of the sub-projects of the effort and who
is assigned to these sub-projects. This avoids duplicating effort.
If you are interested in contributing to this effort, please send a message
to the #libcxx channel in the LLVM discord. Please *do not* start working
on any items below that has already been assigned to someone else.
Sub-projects in the Implementation Effort
=========================================
.. csv-table::
:file: ZipProjects.csv
:header-rows: 1
:widths: auto

View File

@ -1,27 +0,0 @@
Section,Description,Dependencies,Assignee,Complete
| `[tuple.syn] <https://wg21.link/tuple.syn>`_, "`[tuple] basic_common_reference, common_type <https://reviews.llvm.org/D116538>`_", None, Nikolas Klauser, |In Progress|
| `[tuple.tuple] <https://wg21.link/tuple.tuple>`_, "`[tuple] constructor, assignment and swap overloads <https://reviews.llvm.org/D116621>`_", None, Nikolas Klauser, |In Progress|
| `[utility.syn] <https://wg21.link/utility.syn>`_, "[pair] basic_common_reference, common_type", None, Nikolas Klauser, |Not Started|
| `[pairs.pair] <https://wg21.link/pairs.pair>`_, "[pair] constructor, assignment and swap overloads", None, Nikolas Klauser, |Not Started|
"| `[memory.syn] <https://wg21.link/memory.syn>`_
| `[allocator.uses.construction] <https://wg21.link/allocator.uses.construction>`_", "[pair] uses_allocator_construction_args overloads", None, Unassigned, |Not Started|
| `[vector.bool] <https://wg21.link/vector.bool>`_, "[vector<bool>::reference] add const operator= overload", None, Nikolas Klauser, |Not Started|
| `[iterator.concept.winc] <https://wg21.link/iterator.concept.winc>`_, "Update weakly_comparable", None, Unassigned, |Not Started|
| `[range.zip] <https://wg21.link/ranges.syn>`_, "zip_view", "| `zip_view::iterator`
| `zip_view::sentinel`", Unassigned, |Not Started|
| `[range.zip.iterator] <https://wg21.link/range.zip.transform>`_, "zip_view::iterator", None, Unassigned, |Not Started|
| `[range.zip.sentinel] <https://wg21.link/range.zip.sentinel>`_, "zip_view::sentinel", None, Unassigned, |Not Started|
| `[range.zip.transform.view] <https://wg21.link/range.zip.transform.view>`_, "zip_transform_view", "| `zip_transform_view::iterator`
| `zip_transform_view::sentinel`", Unassigned, |Not Started|
| `[range.zip.transform.iterator] <https://wg21.link/range.zip.transform.iterator>`_, "zip_transform_view::iterator", None, Unassigned, |Not Started|
| `[range.zip.transform.sentinel] <https://wg21.link/range.zip.transform.sentinel>`_, "zip_transform_view::sentinel", None, Unassigned, |Not Started|
| `[range.adjacent.view] <https://wg21.link/range.adjacent.view>`_, "adjacent_view", "| `adjacent_view::iterator`
| `adjacent_view::sentinel`", Unassigned, |Not Started|
| `[range.adjacent.iterator] <https://wg21.link/range.adjacent.iterator>`_, "adjacent_view::iterator", None, Unassigned, |Not Started|
| `[range.adjacent.sentinel] <https://wg21.link/range.adjacent.sentinel>`_, "adjacent_view::sentinel", None, Unassigned, |Not Started|
| `[range.adjacent.transform.view] <https://wg21.link/range.adjacent.transform.view>`_, "adjacent_transform_view", "| `adjacent_transform_view::iterator`,
| `adjacent_transform_view::sentinel`", Unassigned, |Not Started|
| `[range.adjacent.transform.iterator] <https://wg21.link/range.adjacent.transform.iterator>`_, "adjacent_transform_view::iterator", None, Unassigned, |Not Started|
| `[range.adjacent.transform.sentinel] <https://wg21.link/range.adjacent.transform.sentinel>`_, "adjacent_transform_view::sentinel", None, Unassigned, |Not Started|
| `[ranges.syn] <https://wg21.link/ranges.syn>`_, "enable_borrowed_range zip_view and adjacent_view", "| `zip_view`
| `adjacent_view`", Unassigned, |Not Started|
1 Section Description Dependencies Assignee Complete
2 | `[tuple.syn] <https://wg21.link/tuple.syn>`_ `[tuple] basic_common_reference, common_type <https://reviews.llvm.org/D116538>`_ None Nikolas Klauser |In Progress|
3 | `[tuple.tuple] <https://wg21.link/tuple.tuple>`_ `[tuple] constructor, assignment and swap overloads <https://reviews.llvm.org/D116621>`_ None Nikolas Klauser |In Progress|
4 | `[utility.syn] <https://wg21.link/utility.syn>`_ [pair] basic_common_reference, common_type None Nikolas Klauser |Not Started|
5 | `[pairs.pair] <https://wg21.link/pairs.pair>`_ [pair] constructor, assignment and swap overloads None Nikolas Klauser |Not Started|
6 | `[memory.syn] <https://wg21.link/memory.syn>`_ | `[allocator.uses.construction] <https://wg21.link/allocator.uses.construction>`_ [pair] uses_allocator_construction_args overloads None Unassigned |Not Started|
7 | `[vector.bool] <https://wg21.link/vector.bool>`_ [vector<bool>::reference] add const operator= overload None Nikolas Klauser |Not Started|
8 | `[iterator.concept.winc] <https://wg21.link/iterator.concept.winc>`_ Update weakly_comparable None Unassigned |Not Started|
9 | `[range.zip] <https://wg21.link/ranges.syn>`_ zip_view | `zip_view::iterator` | `zip_view::sentinel` Unassigned |Not Started|
10 | `[range.zip.iterator] <https://wg21.link/range.zip.transform>`_ zip_view::iterator None Unassigned |Not Started|
11 | `[range.zip.sentinel] <https://wg21.link/range.zip.sentinel>`_ zip_view::sentinel None Unassigned |Not Started|
12 | `[range.zip.transform.view] <https://wg21.link/range.zip.transform.view>`_ zip_transform_view | `zip_transform_view::iterator` | `zip_transform_view::sentinel` Unassigned |Not Started|
13 | `[range.zip.transform.iterator] <https://wg21.link/range.zip.transform.iterator>`_ zip_transform_view::iterator None Unassigned |Not Started|
14 | `[range.zip.transform.sentinel] <https://wg21.link/range.zip.transform.sentinel>`_ zip_transform_view::sentinel None Unassigned |Not Started|
15 | `[range.adjacent.view] <https://wg21.link/range.adjacent.view>`_ adjacent_view | `adjacent_view::iterator` | `adjacent_view::sentinel` Unassigned |Not Started|
16 | `[range.adjacent.iterator] <https://wg21.link/range.adjacent.iterator>`_ adjacent_view::iterator None Unassigned |Not Started|
17 | `[range.adjacent.sentinel] <https://wg21.link/range.adjacent.sentinel>`_ adjacent_view::sentinel None Unassigned |Not Started|
18 | `[range.adjacent.transform.view] <https://wg21.link/range.adjacent.transform.view>`_ adjacent_transform_view | `adjacent_transform_view::iterator`, | `adjacent_transform_view::sentinel` Unassigned |Not Started|
19 | `[range.adjacent.transform.iterator] <https://wg21.link/range.adjacent.transform.iterator>`_ adjacent_transform_view::iterator None Unassigned |Not Started|
20 | `[range.adjacent.transform.sentinel] <https://wg21.link/range.adjacent.transform.sentinel>`_ adjacent_transform_view::sentinel None Unassigned |Not Started|
21 | `[ranges.syn] <https://wg21.link/ranges.syn>`_ enable_borrowed_range zip_view and adjacent_view | `zip_view` | `adjacent_view` Unassigned |Not Started|

View File

@ -227,11 +227,12 @@ An example build would look like:
.. code-block:: bash
$ cd build
$ ninja cxx-benchmarks
$ cmake [options] <path to libcxx sources>
$ make cxx-benchmarks
This will build all of the benchmarks under ``<libcxx-src>/benchmarks`` to be
built against the just-built libc++. The compiled tests are output into
``build/projects/libcxx/benchmarks``.
``build/benchmarks``.
The benchmarks can also be built against the platforms native standard library
using the ``-DLIBCXX_BUILD_BENCHMARKS_NATIVE_STDLIB=ON`` CMake option. This
@ -254,7 +255,8 @@ For example:
.. code-block:: bash
$ cd build/projects/libcxx/benchmarks
$ cd build/benchmarks
$ make cxx-benchmarks
$ ./algorithms.libcxx.out # Runs all the benchmarks
$ ./algorithms.libcxx.out --benchmark_filter=BM_Sort.* # Only runs the sort benchmarks

View File

@ -338,7 +338,6 @@ which no dialect declares as such (See the second form described above).
* ``upper_bound``
* ``lock_guard``'s constructors
* ``as_const``
* ``bit_cast``
* ``forward``
* ``move``
* ``move_if_noexcept``

View File

@ -48,9 +48,9 @@ copyright = u'2011-%d, LLVM Project' % date.today().year
# built documents.
#
# The short X.Y version.
version = '14.0'
version = '13.0'
# The full version, including alpha/beta/rc tags.
release = '14.0'
release = '13.0'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@ -43,10 +43,8 @@ Getting Started with libc++
Status/Cxx17
Status/Cxx20
Status/Cxx2b
Status/Format
Status/Ranges
Status/Spaceship
Status/Zip
Status/Format
.. toctree::
@ -93,6 +91,7 @@ reasons, but some of the major ones are:
Further, both projects are apparently abandoned: STLport 5.2.1 was
released in Oct'08, and STDCXX 4.2.1 in May'08.
.. _platform_and_compiler_support:
Platform and Compiler Support
=============================
@ -104,9 +103,8 @@ velocity, libc++ drops support for older compilers as newer ones are released.
============ =============== ========================== =====================
Compiler Versions Restrictions Support policy
============ =============== ========================== =====================
Clang 12, 13 latest two stable releases per `LLVM's release page <https://releases.llvm.org>`_
Clang 11, 12 latest two stable releases per `LLVM's release page <https://releases.llvm.org>`_
AppleClang 12 latest stable release per `Xcode's release page <https://developer.apple.com/documentation/xcode-release-notes>`_
Open XL 17.1 (AIX) latest stable release per `Open XL's documentation page <https://www.ibm.com/docs/en/openxl-c-and-cpp-aix>`_
GCC 11 In C++11 or later only latest stable release per `GCC's release page <https://gcc.gnu.org/releases.html>`_
============ =============== ========================== =====================
@ -118,8 +116,7 @@ Target platform Target architecture Notes
macOS 10.9+ i386, x86_64, arm64 Building the shared library itself requires targetting macOS 10.11+
FreeBSD 10+ i386, x86_64, arm
Linux i386, x86_64, arm, arm64
Windows x86_64 Both MSVC and MinGW style environments
AIX powerpc, powerpc64
Windows x86_64
=============== ========================= ============================
Generally speaking, libc++ should work on any platform that provides a fairly complete
@ -132,8 +129,8 @@ for all the platforms and compilers that we claim to support. If a platform or c
is not listed here, it is not officially supported. It may happen to work, and
in practice the library is known to work on some platforms not listed here, but
we don't make any guarantees. If you would like your compiler and/or platform
to be formally supported and listed here, please work with the libc++ team to set
up testing for your configuration.
to be formally supported and listed here,
please work with the libc++ team to set up testing for your configuration.
C++ Dialect Support
@ -158,7 +155,7 @@ This list contains known issues with libc++
A full list of currently open libc++ bugs can be `found here`__.
.. __: https://github.com/llvm/llvm-project/labels/libc%2B%2B
.. __: https://bugs.llvm.org/buglist.cgi?component=All%20Bugs&product=libc%2B%2B&query_format=advanced&resolution=---&order=changeddate%20DESC%2Cassigned_to%20DESC%2Cbug_status%2Cpriority%2Cbug_id&list_id=74184
Design Documents
@ -178,7 +175,6 @@ Design Documents
DesignDocs/NoexceptPolicy
DesignDocs/ThreadingSupportAPI
DesignDocs/UniquePtrTrivialAbi
DesignDocs/UnspecifiedBehaviorRandomization
DesignDocs/VisibilityMacros
@ -199,7 +195,7 @@ and `Getting started with LLVM <https://llvm.org/docs/GettingStarted.html>`__.
**Bug Reports**
If you think you've found a bug in libc++, please report it using
the `LLVM bug tracker`_. If you're not sure, you
the `LLVM Bugzilla`_. If you're not sure, you
can post a message to the `libcxx-dev mailing list`_ or on IRC.
**Patches**
@ -218,7 +214,7 @@ Quick Links
===========
* `LLVM Homepage <https://llvm.org/>`_
* `libc++abi Homepage <http://libcxxabi.llvm.org/>`_
* `LLVM bug tracker <https://github.com/llvm/llvm-project/labels/libc++/>`_
* `LLVM Bugzilla <https://bugs.llvm.org/>`_
* `libcxx-commits Mailing List`_
* `libcxx-dev Mailing List`_
* `Browse libc++ Sources <https://github.com/llvm/llvm-project/tree/main/libcxx/>`_

View File

@ -4,79 +4,76 @@ set(files
__algorithm/any_of.h
__algorithm/binary_search.h
__algorithm/clamp.h
__algorithm/comp.h
__algorithm/comp_ref_type.h
__algorithm/copy.h
__algorithm/comp.h
__algorithm/copy_backward.h
__algorithm/copy_if.h
__algorithm/copy_n.h
__algorithm/count.h
__algorithm/copy.h
__algorithm/count_if.h
__algorithm/equal.h
__algorithm/count.h
__algorithm/equal_range.h
__algorithm/fill.h
__algorithm/equal.h
__algorithm/fill_n.h
__algorithm/find.h
__algorithm/fill.h
__algorithm/find_end.h
__algorithm/find_first_of.h
__algorithm/find_if.h
__algorithm/find_if_not.h
__algorithm/for_each.h
__algorithm/find_if.h
__algorithm/find.h
__algorithm/for_each_n.h
__algorithm/generate.h
__algorithm/for_each.h
__algorithm/generate_n.h
__algorithm/generate.h
__algorithm/half_positive.h
__algorithm/in_in_out_result.h
__algorithm/in_in_result.h
__algorithm/in_out_result.h
__algorithm/includes.h
__algorithm/inplace_merge.h
__algorithm/is_heap.h
__algorithm/is_heap_until.h
__algorithm/is_heap.h
__algorithm/is_partitioned.h
__algorithm/is_permutation.h
__algorithm/is_sorted.h
__algorithm/is_sorted_until.h
__algorithm/is_sorted.h
__algorithm/iter_swap.h
__algorithm/lexicographical_compare.h
__algorithm/lower_bound.h
__algorithm/make_heap.h
__algorithm/max.h
__algorithm/max_element.h
__algorithm/max.h
__algorithm/merge.h
__algorithm/min.h
__algorithm/min_element.h
__algorithm/minmax.h
__algorithm/min.h
__algorithm/minmax_element.h
__algorithm/minmax.h
__algorithm/mismatch.h
__algorithm/move.h
__algorithm/move_backward.h
__algorithm/move.h
__algorithm/next_permutation.h
__algorithm/none_of.h
__algorithm/nth_element.h
__algorithm/partial_sort.h
__algorithm/partial_sort_copy.h
__algorithm/partition.h
__algorithm/partial_sort.h
__algorithm/partition_copy.h
__algorithm/partition_point.h
__algorithm/partition.h
__algorithm/pop_heap.h
__algorithm/prev_permutation.h
__algorithm/push_heap.h
__algorithm/remove.h
__algorithm/remove_copy.h
__algorithm/remove_copy_if.h
__algorithm/remove_copy.h
__algorithm/remove_if.h
__algorithm/replace.h
__algorithm/replace_copy.h
__algorithm/remove.h
__algorithm/replace_copy_if.h
__algorithm/replace_copy.h
__algorithm/replace_if.h
__algorithm/reverse.h
__algorithm/replace.h
__algorithm/reverse_copy.h
__algorithm/rotate.h
__algorithm/reverse.h
__algorithm/rotate_copy.h
__algorithm/rotate.h
__algorithm/sample.h
__algorithm/search.h
__algorithm/search_n.h
__algorithm/search.h
__algorithm/set_difference.h
__algorithm/set_intersection.h
__algorithm/set_symmetric_difference.h
@ -85,117 +82,34 @@ set(files
__algorithm/shift_right.h
__algorithm/shuffle.h
__algorithm/sift_down.h
__algorithm/sort.h
__algorithm/sort_heap.h
__algorithm/sort.h
__algorithm/stable_partition.h
__algorithm/stable_sort.h
__algorithm/swap_ranges.h
__algorithm/transform.h
__algorithm/unique.h
__algorithm/unique_copy.h
__algorithm/unique.h
__algorithm/unwrap_iter.h
__algorithm/upper_bound.h
__availability
__bit/bit_cast.h
__bit/byteswap.h
__bit_reference
__bits
__bsd_locale_defaults.h
__bsd_locale_fallbacks.h
__charconv/chars_format.h
__charconv/from_chars_result.h
__charconv/to_chars_result.h
__chrono/calendar.h
__chrono/convert_to_timespec.h
__chrono/duration.h
__chrono/file_clock.h
__chrono/high_resolution_clock.h
__chrono/steady_clock.h
__chrono/system_clock.h
__chrono/time_point.h
__compare/common_comparison_category.h
__compare/compare_partial_order_fallback.h
__compare/compare_strong_order_fallback.h
__compare/compare_three_way.h
__compare/compare_three_way_result.h
__compare/compare_weak_order_fallback.h
__compare/is_eq.h
__compare/ordering.h
__compare/partial_order.h
__compare/strong_order.h
__compare/synth_three_way.h
__compare/three_way_comparable.h
__compare/weak_order.h
__concepts/arithmetic.h
__concepts/assignable.h
__concepts/boolean_testable.h
__concepts/class_or_enum.h
__concepts/common_reference_with.h
__concepts/common_with.h
__concepts/constructible.h
__concepts/convertible_to.h
__concepts/copyable.h
__concepts/derived_from.h
__concepts/destructible.h
__concepts/different_from.h
__concepts/equality_comparable.h
__concepts/invocable.h
__concepts/movable.h
__concepts/predicate.h
__concepts/regular.h
__concepts/relation.h
__concepts/same_as.h
__concepts/semiregular.h
__concepts/swappable.h
__concepts/totally_ordered.h
__config
__coroutine/coroutine_handle.h
__coroutine/coroutine_traits.h
__coroutine/noop_coroutine_handle.h
__coroutine/trivial_awaitables.h
__debug
__errc
__filesystem/copy_options.h
__filesystem/directory_entry.h
__filesystem/directory_iterator.h
__filesystem/directory_options.h
__filesystem/file_status.h
__filesystem/file_time_type.h
__filesystem/file_type.h
__filesystem/filesystem_error.h
__filesystem/operations.h
__filesystem/path.h
__filesystem/path_iterator.h
__filesystem/perm_options.h
__filesystem/perms.h
__filesystem/recursive_directory_iterator.h
__filesystem/space_info.h
__filesystem/u8path.h
__format/format_arg.h
__format/format_args.h
__format/format_context.h
__format/format_error.h
__format/format_fwd.h
__format/format_parse_context.h
__format/format_string.h
__format/format_to_n_result.h
__format/formatter.h
__format/formatter_bool.h
__format/formatter_char.h
__format/formatter_floating_point.h
__format/formatter_integer.h
__format/formatter_integral.h
__format/formatter_pointer.h
__format/formatter_string.h
__format/parser_std_format_spec.h
__function_like.h
__functional_base
__functional/binary_function.h
__functional/binary_negate.h
__functional/bind.h
__functional/bind_back.h
__functional/bind_front.h
__functional/bind.h
__functional/binder1st.h
__functional/binder2nd.h
__functional/compose.h
__functional/default_searcher.h
__functional/function.h
__functional/hash.h
@ -215,7 +129,6 @@ set(files
__functional/unary_negate.h
__functional/unwrap_ref.h
__functional/weak_result_type.h
__functional_base
__hash_table
__iterator/access.h
__iterator/advance.h
@ -230,14 +143,13 @@ set(files
__iterator/erase_if_container.h
__iterator/front_insert_iterator.h
__iterator/incrementable_traits.h
__iterator/indirectly_comparable.h
__iterator/insert_iterator.h
__iterator/istream_iterator.h
__iterator/istreambuf_iterator.h
__iterator/iter_move.h
__iterator/iter_swap.h
__iterator/iterator.h
__iterator/iterator_traits.h
__iterator/iterator.h
__iterator/move_iterator.h
__iterator/next.h
__iterator/ostream_iterator.h
@ -248,109 +160,47 @@ set(files
__iterator/reverse_access.h
__iterator/reverse_iterator.h
__iterator/size.h
__iterator/unreachable_sentinel.h
__iterator/wrap_iter.h
__libcpp_version
__locale
__mbstate_t.h
__memory/addressof.h
__memory/allocation_guard.h
__memory/allocator.h
__memory/allocator_arg_t.h
__memory/allocator_traits.h
__memory/allocator.h
__memory/auto_ptr.h
__memory/compressed_pair.h
__memory/concepts.h
__memory/construct_at.h
__memory/pointer_safety.h
__memory/pointer_traits.h
__memory/ranges_construct_at.h
__memory/ranges_uninitialized_algorithms.h
__memory/raw_storage_iterator.h
__memory/shared_ptr.h
__memory/temporary_buffer.h
__memory/uninitialized_algorithms.h
__memory/unique_ptr.h
__memory/uses_allocator.h
__memory/voidify.h
__mutex_base
__node_handle
__nullptr
__numeric/accumulate.h
__numeric/adjacent_difference.h
__numeric/exclusive_scan.h
__numeric/gcd_lcm.h
__numeric/inclusive_scan.h
__numeric/inner_product.h
__numeric/iota.h
__numeric/midpoint.h
__numeric/partial_sum.h
__numeric/reduce.h
__numeric/transform_exclusive_scan.h
__numeric/transform_inclusive_scan.h
__numeric/transform_reduce.h
__random/bernoulli_distribution.h
__random/binomial_distribution.h
__random/cauchy_distribution.h
__random/chi_squared_distribution.h
__random/clamp_to_integral.h
__random/default_random_engine.h
__random/discard_block_engine.h
__random/discrete_distribution.h
__random/exponential_distribution.h
__random/extreme_value_distribution.h
__random/fisher_f_distribution.h
__random/gamma_distribution.h
__random/generate_canonical.h
__random/geometric_distribution.h
__random/independent_bits_engine.h
__random/is_seed_sequence.h
__random/knuth_b.h
__random/linear_congruential_engine.h
__random/log2.h
__random/lognormal_distribution.h
__random/mersenne_twister_engine.h
__random/negative_binomial_distribution.h
__random/normal_distribution.h
__random/piecewise_constant_distribution.h
__random/piecewise_linear_distribution.h
__random/poisson_distribution.h
__random/random_device.h
__random/ranlux.h
__random/seed_seq.h
__random/shuffle_order_engine.h
__random/student_t_distribution.h
__random/subtract_with_carry_engine.h
__random/uniform_int_distribution.h
__random/uniform_random_bit_generator.h
__random/uniform_real_distribution.h
__random/weibull_distribution.h
__ranges/access.h
__ranges/all.h
__ranges/common_view.h
__ranges/concepts.h
__ranges/copyable_box.h
__ranges/counted.h
__ranges/dangling.h
__ranges/data.h
__ranges/drop_view.h
__ranges/empty.h
__ranges/empty_view.h
__ranges/empty.h
__ranges/enable_borrowed_range.h
__ranges/enable_view.h
__ranges/iota_view.h
__ranges/join_view.h
__ranges/non_propagating_cache.h
__ranges/owning_view.h
__ranges/range_adaptor.h
__ranges/ref_view.h
__ranges/reverse_view.h
__ranges/single_view.h
__ranges/size.h
__ranges/subrange.h
__ranges/take_view.h
__ranges/transform_view.h
__ranges/view_interface.h
__ranges/views.h
__split_buffer
__std_stream
__string
@ -358,12 +208,14 @@ set(files
__support/fuchsia/xlocale.h
__support/ibm/gettod_zos.h
__support/ibm/limits.h
__support/ibm/locale_mgmt_aix.h
__support/ibm/locale_mgmt_zos.h
__support/ibm/nanosleep.h
__support/ibm/support.h
__support/ibm/xlocale.h
__support/musl/xlocale.h
__support/newlib/xlocale.h
__support/nuttx/xlocale.h
__support/openbsd/xlocale.h
__support/solaris/floatingpoint.h
__support/solaris/wchar.h
@ -373,14 +225,12 @@ set(files
__support/xlocale/__nop_locale_mgmt.h
__support/xlocale/__posix_l_fallback.h
__support/xlocale/__strtonum_fallback.h
__thread/poll_with_backoff.h
__thread/timed_backoff_policy.h
__threading_support
__tree
__tuple
__undef_macros
__utility/__decay_copy.h
__utility/as_const.h
__utility/auto_cast.h
__utility/cmp.h
__utility/declval.h
__utility/exchange.h
@ -390,11 +240,9 @@ set(files
__utility/move.h
__utility/pair.h
__utility/piecewise_construct.h
__utility/priority_tag.h
__utility/rel_ops.h
__utility/swap.h
__utility/to_underlying.h
__utility/transaction.h
__variant/monostate.h
algorithm
any
@ -422,7 +270,6 @@ set(files
complex.h
concepts
condition_variable
coroutine
csetjmp
csignal
cstdarg
@ -501,6 +348,7 @@ set(files
queue
random
ranges
ranges
ratio
regex
scoped_allocator
@ -519,8 +367,8 @@ set(files
stdlib.h
streambuf
string
string.h
string_view
string.h
strstream
system_error
tgmath.h
@ -570,7 +418,7 @@ if (LIBCXX_INSTALL_HEADERS)
foreach(file ${files})
get_filename_component(dir ${file} DIRECTORY)
install(FILES ${file}
DESTINATION "${LIBCXX_INSTALL_INCLUDE_DIR}/${dir}"
DESTINATION ${LIBCXX_INSTALL_INCLUDE_DIR}/${dir}
COMPONENT cxx-headers
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)
@ -578,7 +426,7 @@ if (LIBCXX_INSTALL_HEADERS)
# Install the generated __config_site.
install(FILES ${LIBCXX_GENERATED_INCLUDE_TARGET_DIR}/__config_site
DESTINATION "${LIBCXX_INSTALL_INCLUDE_TARGET_DIR}"
DESTINATION ${LIBCXX_INSTALL_INCLUDE_TARGET_DIR}
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
COMPONENT cxx-headers)

View File

@ -10,14 +10,17 @@
#ifndef _LIBCPP___ALGORITHM_ADJACENT_FIND_H
#define _LIBCPP___ALGORITHM_ADJACENT_FIND_H
#include <__algorithm/comp.h>
#include <__config>
#include <__algorithm/comp.h>
#include <__iterator/iterator_traits.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _ForwardIterator, class _BinaryPredicate>
@ -43,4 +46,6 @@ adjacent_find(_ForwardIterator __first, _ForwardIterator __last) {
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_ADJACENT_FIND_H

View File

@ -16,6 +16,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _InputIterator, class _Predicate>
@ -29,4 +32,6 @@ all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) {
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_ALL_OF_H

View File

@ -16,6 +16,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _InputIterator, class _Predicate>
@ -29,4 +32,6 @@ any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) {
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_ANY_OF_H

View File

@ -9,16 +9,19 @@
#ifndef _LIBCPP___ALGORITHM_BINARY_SEARCH_H
#define _LIBCPP___ALGORITHM_BINARY_SEARCH_H
#include <__algorithm/comp.h>
#include <__algorithm/comp_ref_type.h>
#include <__algorithm/lower_bound.h>
#include <__config>
#include <__algorithm/comp.h>
#include <__algorithm/lower_bound.h>
#include <__algorithm/comp_ref_type.h>
#include <__iterator/iterator_traits.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Compare, class _ForwardIterator, class _Tp>
@ -50,6 +53,9 @@ binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __va
__less<typename iterator_traits<_ForwardIterator>::value_type, _Tp>());
}
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_BINARY_SEARCH_H

View File

@ -9,17 +9,21 @@
#ifndef _LIBCPP___ALGORITHM_CLAMP_H
#define _LIBCPP___ALGORITHM_CLAMP_H
#include <__algorithm/comp.h>
#include <__config>
#include <__debug>
#include <__algorithm/comp.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
#if _LIBCPP_STD_VER > 14
// clamp
template<class _Tp, class _Compare>
_LIBCPP_NODISCARD_EXT inline
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
@ -43,4 +47,6 @@ clamp(const _Tp& __v, const _Tp& __lo, const _Tp& __hi)
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_CLAMP_H

View File

@ -15,6 +15,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
// I'd like to replace these with _VSTD::equal_to<void>, but can't because:
@ -89,4 +92,6 @@ struct __less<_T1, const _T1>
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_COMP_H

View File

@ -10,16 +10,15 @@
#define _LIBCPP___ALGORITHM_COMP_REF_TYPE_H
#include <__config>
#ifdef _LIBCPP_DEBUG
# include <__debug>
# include <__utility/declval.h>
#endif
#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
#ifdef _LIBCPP_DEBUG
@ -28,11 +27,11 @@ template <class _Compare>
struct __debug_less
{
_Compare &__comp_;
_LIBCPP_CONSTEXPR_AFTER_CXX11
_LIBCPP_CONSTEXPR_AFTER_CXX17
__debug_less(_Compare& __c) : __comp_(__c) {}
template <class _Tp, class _Up>
_LIBCPP_CONSTEXPR_AFTER_CXX11
_LIBCPP_CONSTEXPR_AFTER_CXX17
bool operator()(const _Tp& __x, const _Up& __y)
{
bool __r = __comp_(__x, __y);
@ -42,7 +41,7 @@ struct __debug_less
}
template <class _Tp, class _Up>
_LIBCPP_CONSTEXPR_AFTER_CXX11
_LIBCPP_CONSTEXPR_AFTER_CXX17
bool operator()(_Tp& __x, _Up& __y)
{
bool __r = __comp_(__x, __y);
@ -52,7 +51,7 @@ struct __debug_less
}
template <class _LHS, class _RHS>
_LIBCPP_CONSTEXPR_AFTER_CXX11
_LIBCPP_CONSTEXPR_AFTER_CXX17
inline _LIBCPP_INLINE_VISIBILITY
decltype((void)declval<_Compare&>()(
declval<_LHS &>(), declval<_RHS &>()))
@ -62,7 +61,7 @@ struct __debug_less
}
template <class _LHS, class _RHS>
_LIBCPP_CONSTEXPR_AFTER_CXX11
_LIBCPP_CONSTEXPR_AFTER_CXX17
inline _LIBCPP_INLINE_VISIBILITY
void __do_compare_assert(long, _LHS &, _RHS &) {}
};
@ -74,12 +73,15 @@ struct __comp_ref_type {
// Pass the comparator by lvalue reference. Or in debug mode, using a
// debugging wrapper that stores a reference.
#ifndef _LIBCPP_DEBUG
typedef _Comp& type;
typedef typename add_lvalue_reference<_Comp>::type type;
#else
typedef __debug_less<_Comp> type;
#endif
};
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_COMP_REF_TYPE_H

View File

@ -9,8 +9,8 @@
#ifndef _LIBCPP___ALGORITHM_COPY_H
#define _LIBCPP___ALGORITHM_COPY_H
#include <__algorithm/unwrap_iter.h>
#include <__config>
#include <__algorithm/unwrap_iter.h>
#include <__iterator/iterator_traits.h>
#include <cstring>
#include <type_traits>
@ -19,6 +19,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
// copy
@ -74,4 +77,6 @@ copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result)
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_COPY_H

View File

@ -9,8 +9,8 @@
#ifndef _LIBCPP___ALGORITHM_COPY_BACKWARD_H
#define _LIBCPP___ALGORITHM_COPY_BACKWARD_H
#include <__algorithm/unwrap_iter.h>
#include <__config>
#include <__algorithm/unwrap_iter.h>
#include <__iterator/iterator_traits.h>
#include <cstring>
#include <type_traits>
@ -19,6 +19,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _BidirectionalIterator, class _OutputIterator>
@ -76,4 +79,6 @@ copy_backward(_BidirectionalIterator1 __first, _BidirectionalIterator1 __last,
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_COPY_BACKWARD_H

View File

@ -10,11 +10,18 @@
#define _LIBCPP___ALGORITHM_COPY_IF_H
#include <__config>
#include <__algorithm/unwrap_iter.h>
#include <__iterator/iterator_traits.h>
#include <cstring>
#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template<class _InputIterator, class _OutputIterator, class _Predicate>
@ -36,4 +43,6 @@ copy_if(_InputIterator __first, _InputIterator __last,
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_COPY_IF_H

View File

@ -9,15 +9,20 @@
#ifndef _LIBCPP___ALGORITHM_COPY_N_H
#define _LIBCPP___ALGORITHM_COPY_N_H
#include <__algorithm/copy.h>
#include <__config>
#include <__algorithm/copy.h>
#include <__algorithm/unwrap_iter.h>
#include <__iterator/iterator_traits.h>
#include <cstring>
#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template<class _InputIterator, class _Size, class _OutputIterator>
@ -55,12 +60,13 @@ typename enable_if
>::type
copy_n(_InputIterator __first, _Size __orig_n, _OutputIterator __result)
{
typedef typename iterator_traits<_InputIterator>::difference_type difference_type;
typedef decltype(_VSTD::__convert_to_integral(__orig_n)) _IntegralSize;
_IntegralSize __n = __orig_n;
return _VSTD::copy(__first, __first + difference_type(__n), __result);
return _VSTD::copy(__first, __first + __n, __result);
}
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_COPY_N_H

View File

@ -17,6 +17,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _InputIterator, class _Tp>
@ -32,4 +35,6 @@ _LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_C
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_COUNT_H

View File

@ -17,6 +17,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _InputIterator, class _Predicate>
@ -32,4 +35,6 @@ _LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_C
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_COUNT_IF_H

View File

@ -10,15 +10,18 @@
#ifndef _LIBCPP___ALGORITHM_EQUAL_H
#define _LIBCPP___ALGORITHM_EQUAL_H
#include <__algorithm/comp.h>
#include <__config>
#include <__iterator/distance.h>
#include <__algorithm/comp.h>
#include <__iterator/iterator_traits.h>
#include <iterator> // FIXME: replace with <__iterator/distance.h> when it lands
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
@ -57,14 +60,14 @@ __equal(_RandomAccessIterator1 __first1, _RandomAccessIterator1 __last1, _Random
if (_VSTD::distance(__first1, __last1) != _VSTD::distance(__first2, __last2))
return false;
return _VSTD::equal<_RandomAccessIterator1, _RandomAccessIterator2,
_BinaryPredicate&>(__first1, __last1, __first2, __pred);
typename add_lvalue_reference<_BinaryPredicate>::type>(__first1, __last1, __first2, __pred);
}
template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
_LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 bool
equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2,
_BinaryPredicate __pred) {
return _VSTD::__equal<_BinaryPredicate&>(
return _VSTD::__equal<typename add_lvalue_reference<_BinaryPredicate>::type>(
__first1, __last1, __first2, __last2, __pred, typename iterator_traits<_InputIterator1>::iterator_category(),
typename iterator_traits<_InputIterator2>::iterator_category());
}
@ -82,4 +85,6 @@ equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_EQUAL_H

View File

@ -9,18 +9,21 @@
#ifndef _LIBCPP___ALGORITHM_EQUAL_RANGE_H
#define _LIBCPP___ALGORITHM_EQUAL_RANGE_H
#include <__config>
#include <__algorithm/comp.h>
#include <__algorithm/comp_ref_type.h>
#include <__algorithm/half_positive.h>
#include <__algorithm/lower_bound.h>
#include <__algorithm/upper_bound.h>
#include <__config>
#include <iterator>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Compare, class _ForwardIterator, class _Tp>
@ -79,4 +82,6 @@ equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __valu
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_EQUAL_RANGE_H

View File

@ -9,8 +9,8 @@
#ifndef _LIBCPP___ALGORITHM_FILL_H
#define _LIBCPP___ALGORITHM_FILL_H
#include <__algorithm/fill_n.h>
#include <__config>
#include <__algorithm/fill_n.h>
#include <__iterator/iterator_traits.h>
#include <type_traits>
@ -18,6 +18,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _ForwardIterator, class _Tp>
@ -47,4 +50,6 @@ fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value_)
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_FILL_H

View File

@ -17,6 +17,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _OutputIterator, class _Size, class _Tp>
@ -39,4 +42,6 @@ fill_n(_OutputIterator __first, _Size __n, const _Tp& __value_)
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_FILL_N_H

View File

@ -16,6 +16,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _InputIterator, class _Tp>
@ -29,4 +32,6 @@ find(_InputIterator __first, _InputIterator __last, const _Tp& __value_) {
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_FIND_H

View File

@ -10,14 +10,18 @@
#ifndef _LIBCPP___ALGORITHM_FIND_END_OF_H
#define _LIBCPP___ALGORITHM_FIND_END_OF_H
#include <__algorithm/comp.h>
#include <__config>
#include <__algorithm/comp.h>
#include <__iterator/iterator_traits.h>
#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _BinaryPredicate, class _ForwardIterator1, class _ForwardIterator2>
@ -95,16 +99,14 @@ template <class _BinaryPredicate, class _RandomAccessIterator1, class _RandomAcc
_LIBCPP_CONSTEXPR_AFTER_CXX11 _RandomAccessIterator1 __find_end(
_RandomAccessIterator1 __first1, _RandomAccessIterator1 __last1, _RandomAccessIterator2 __first2,
_RandomAccessIterator2 __last2, _BinaryPredicate __pred, random_access_iterator_tag, random_access_iterator_tag) {
typedef typename iterator_traits<_RandomAccessIterator1>::difference_type _D1;
typedef typename iterator_traits<_RandomAccessIterator2>::difference_type _D2;
// Take advantage of knowing source and pattern lengths. Stop short when source is smaller than pattern
_D2 __len2 = __last2 - __first2;
typename iterator_traits<_RandomAccessIterator2>::difference_type __len2 = __last2 - __first2;
if (__len2 == 0)
return __last1;
_D1 __len1 = __last1 - __first1;
typename iterator_traits<_RandomAccessIterator1>::difference_type __len1 = __last1 - __first1;
if (__len1 < __len2)
return __last1;
const _RandomAccessIterator1 __s = __first1 + _D1(__len2 - 1); // End of pattern match can't go before here
const _RandomAccessIterator1 __s = __first1 + (__len2 - 1); // End of pattern match can't go before here
_RandomAccessIterator1 __l1 = __last1;
_RandomAccessIterator2 __l2 = __last2;
--__l2;
@ -132,7 +134,7 @@ template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredica
_LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator1
find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2,
_BinaryPredicate __pred) {
return _VSTD::__find_end<_BinaryPredicate&>(
return _VSTD::__find_end<typename add_lvalue_reference<_BinaryPredicate>::type>(
__first1, __last1, __first2, __last2, __pred, typename iterator_traits<_ForwardIterator1>::iterator_category(),
typename iterator_traits<_ForwardIterator2>::iterator_category());
}
@ -147,4 +149,6 @@ find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_FIND_END_OF_H

View File

@ -10,14 +10,17 @@
#ifndef _LIBCPP___ALGORITHM_FIND_FIRST_OF_H
#define _LIBCPP___ALGORITHM_FIND_FIRST_OF_H
#include <__algorithm/comp.h>
#include <__config>
#include <__algorithm/comp.h>
#include <__iterator/iterator_traits.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
@ -49,4 +52,6 @@ _LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_C
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_FIND_FIRST_OF_H

View File

@ -16,6 +16,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _InputIterator, class _Predicate>
@ -29,4 +32,6 @@ find_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) {
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_FIND_IF_H

View File

@ -16,6 +16,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _InputIterator, class _Predicate>
@ -29,4 +32,6 @@ find_if_not(_InputIterator __first, _InputIterator __last, _Predicate __pred) {
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_FIND_IF_NOT_H

View File

@ -16,6 +16,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _InputIterator, class _Function>
@ -29,4 +32,6 @@ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 _Function for_eac
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_FOR_EACH_H

View File

@ -17,6 +17,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
#if _LIBCPP_STD_VER > 14
@ -39,4 +42,6 @@ inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 _InputIterator fo
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_FOR_EACH_N_H

View File

@ -15,6 +15,9 @@
#pragma GCC system_header
#endif
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _ForwardIterator, class _Generator>
@ -28,4 +31,6 @@ generate(_ForwardIterator __first, _ForwardIterator __last, _Generator __gen)
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_GENERATE_H

Some files were not shown because too many files have changed in this diff Show More