This page lists open projects (some big, some small) for libstdc++, the GNU implementation of the C++ Standard Library.
The GettingStarted page has information for people who want to start contributing to GCC.
This page is incomplete -- it may not list changes from the most recent meetings, and only lists changes since the Nov 2015 meeting, but there are some issues from previous meetings that we haven't implemented yet
QoI matters
Add noexcept to tuple constructors
as proposed by Scott's 2017-02-26 proposed resolution for 2899.
More Doxygen documentation in the code
Automate running make check-performance and analysing results for regressions
- Compare results to past results and flag up significant changes (both positive and negative).
Unimplemented changes
Changes from Virtual Plenary November 2020
2839. Self-move-assignment of library types, again
3117. Missing packaged_task deduction guides
3143. monotonic_buffer_resource growth policy is unclear
- No changes needed
3195. What is the stored pointer value of an empty weak_ptr?
3211. std::tuple<> should be trivially constructible
- No changes needed
3236. Random access iterator requirements lack limiting relational operators domain to comparing those from the same range
3249. There are no 'pointers' in §[atomics.lockfree]
- No changes needed
3432. Missing requirement for comparison_category
3443. [networking.ts] net::basic_socket_iostream should use addressof
3447. Deduction guides for take_view and drop_view have different constraints
3450. The const overloads of take_while_view::begin/end are underconstrained
3464. istream::gcount() can overflow
2731. Existence of lock_guard<MutexTypes...>::mutex_type typedef unclear
2743. p0083r3 node_handle private members missing "exposition only" comment
2820. Clarify <cstdint> macros
3036. polymorphic_allocator::destroy is extraneous
3120. Unclear behavior of monotonic_buffer_resource::release()
3170. is_always_equal added to std::allocator makes the standard library treat derived types as always equal
3171. LWG 2989 breaks directory_entry stream insertion
3306. ranges::advance violates its preconditions
3403. Domain of ranges::ssize(E) doesn't match ranges::size(E)
3404. Finish removing subrange's conversions from pair-like
3405. common_view's converting constructor is bad, too
3406. elements_view::begin() and elements_view::end() have incompatible constraints
3413. [fund.ts.v3] propagate_const's swap's noexcept specification needs to be constrained and use a trait
3414. [networking.ts] service_already_exists has no usable constructors
3419. §[algorithms.requirements]/15 doesn't reserve as many rights as it intends to
- No changes needed
3420. cpp17-iterator should check that the type looks like an iterator first
3421. Imperfect ADL emulation for boolean-testable
3425. condition_variable_any fails to constrain its Lock parameters
3426. operator<=>(const unique_ptr<T, D>&, nullptr_t) can't get no satisfaction
3427. operator<=>(const shared_ptr<T>&, nullptr_t) definition ill-formed
3428. single_view's in place constructor should be explicit
3434. ios_base never reclaims memory for iarray and parray
3435. three_way_comparable_with<reverse_iterator<int*>, reverse_iterator<const int*>>
3437. __cpp_lib_polymorphic_allocator is in the wrong header
3446. indirectly_readable_traits ambiguity for types with both value_type and element_type
3448. transform_view's sentinel<false> not comparable with iterator<true>
3449. take_view and take_while_view's sentinel<false> not comparable with their const iterator
3453. Generic code cannot call ranges::advance(i, s)
3455. Incorrect Postconditions on unique_ptr move assignment
3460. Unimplementable noop_coroutine_handle guarantees
3461. convertible_to's description mishandles cv-qualified void
3465. compare_partial_order_fallback requires F < E
3466. Specify the requirements for promise/future/shared_future consistently
3467. bool can't be an integer-like type
3472. counted_iterator is missing preconditions
3473. Normative encouragement in non-normative note
- No changes needed
3474. Nesting join_views is broken because of CTAD
3476. thread and jthread constructors require that the parameters be move-constructible but never move construct the parameters
3477. Simplify constraints for semiregular-box
3482. drop_view's const begin should additionally require sized_range
3483. transform_view::iterator's difference is overconstrained
Changes from Prague February 2020
P2081R1 (Rebase the Library Fundamentals v3 TS on C++20
- No changes needed
3194 ConvertibleTo prose does not match code
3233 Broken requirements for shared_ptr converting constructors
3254 Strike stop_token's operator!=
3264 sized_range and ranges::size redundantly use disable_sized_range
3280 View converting constructors can cause constraint recursion and are unneeded
3281 Conversion from pair-like types to subrange is a silent semantic promotion
3284 random_access_iterator semantic constraints accidentally promote difference type using unary negate
- No changes needed
3285 The type of a customization point object shall satisfy semiregular
3286 ranges::size is not required to be valid after a call to ranges::begin on an input range
3291 iota_view::iterator has the wrong iterator_category
ppalka has a patch, but see active issue 3408
3292 iota_view is under-constrained
3294 zoned_time deduction guides misinterprets string/char*
3296 Inconsistent default argument for basic_regex<>::assign
3299 Pointers don't need customized iterator behavior
3300 Non-array ssize overload is underconstrained
- jwakely has a patch for stage 1
3302 Range adaptor objects keys and values are unspecified
3303 Bad "constexpr" marker for destroy/destroy_n
3304 Allocate functions of std::polymorphic_allocator should require [[nodiscard]]
3307 std::allocator<void>().allocate(n)
3310 Replace SIZE_MAX with numeric_limits<size_t>::max()
3313 join_view::iterator::operator-- is incorrectly constrained
3315 Correct Allocator Default Behavior
3316 Correctly define epoch for utc_clock / utc_timepoint
3317 Incorrect operator<< for floating-point durations
3318 Clarify whether clocks can represent time before their epoch
3319 Properly reference specification of IANA time zone database
3320 span::cbegin/cend methods produce different results than std::[ranges::]cbegin/cend
3321 uninitialized_construct_using_allocator should use construct_at
3323 has-tuple-element helper concept needs convertible_to
3324 Special-case std::strong/weak/partial_order for pointers
3325 Constrain return type of transformation function for transform_view
3326 enable_view has false positives
3327 Format alignment specifiers vs. text direction
3329 totally_ordered_with both directly and indirectly requires common_reference_with
3330 Include <compare> from most library headers
3331 Define totally_ordered/_with in terms of partially-ordered-with
3332 Issue in §[time.format]
3338 Rename default_constructible to default_initializable
3346 pair and tuple copy and move constructor have backwards specification
3350 Simplify return type of lexicographical_compare_three_way
3351 ranges::enable_safe_range should not be constrained
3356 __cpp_lib_nothrow_convertible should be __cpp_lib_is_nothrow_convertible
3360 three_way_comparable_with is inconsistent with similar concepts
1203 More useful rvalue stream insertion
2859 Definition of reachable in [ptr.launder] misses pointer arithmetic from pointer-interconvertible object
3018 shared_ptr of function type
3050 Conversion specification problem in chrono::duration constructor
3141 CopyConstructible doesn't preserve source values
- No changes needed
3150 UniformRandomBitGenerator should validate min and max
3175 The CommonReference requirement of concept SwappableWith is not satisfied in the example
3200 midpoint should not constrain T is complete
3201 lerp should be marked as noexcept
3226 zoned_time constructor from string_view should accept zoned_time<Duration2, TimeZonePtr2>
3237 LWG 3038 and 3190 have inconsistent PRs
3238 Insufficiently-defined behavior of std::function deduction guides
3242 std::format: missing rules for arg-id in width and precision
3243 std::format and negative zeroes
3247 ranges::iter_move should perform ADL-only lookup of iter_move
3248 std::format #b, #B, #o, #x, and #X presentation types misformat negative numbers
3250 std::format: # (alternate form) for NaN and inf
3251 Are std::format alignment specifiers applied to string arguments?
3252 Parse locale's aware modifiers for commands are not consistent with POSIX spec
3255 span's array constructor is too strict
3260 year_month* arithmetic rejects durations convertible to years
3262 Formatting of negative durations is not specified
3269 Parse manipulators do not specify the result of the extraction from stream
3270 Parsing and formatting %j with durations
3282 subrange converting constructor should disallow derived to base conversions
3301 transform_view::iterator has incorrect iterator_category
3314 Is stream insertion behavior locale dependent when Period::type is micro?
3328 Clarify that std::string is not good for UTF-8
- No changes needed
3334 basic_osyncstream move assignment and destruction calls basic_syncbuf::emit() twice
3335 Resolve C++20 NB comments US 273 and GB 274
3340 Formatting functions should throw on argument/format string mismatch in §[format.functions]
3347 std::pair<T, U> now requires T and U to be less-than-comparable
3348 __cpp_lib_unwrap_ref in wrong header
3352 strong_equality isn't a thing
3354 has_strong_structural_equality has a meaningless definition
3355 The memory algorithms should support move-only input iterators introduced by P1207
3358 §[span.cons] is mistaken that to_address can throw
3359 <chrono> leap second support should allow for negative leap seconds
3362 Strike stop_source's operator!=
3363 drop_while_view should opt-out of sized_range
- No changes required
3364 Initialize data members of ranges and their iterators
3367 Integer-class conversions should not throw
3369 span's deduction-guide for built-in arrays doesn't work
3371 visit_format_arg and make_format_args are not hidden friends
3372 vformat_to should not try to deduce Out twice
3373 {to,from}_chars_result and format_to_n_result need the "we really mean what we say" wording
3374 P0653 + P1006 should have made the other std::to_address overload constexpr
3375 decay in viewable_range should be remove_cvref
3377 elements_view::iterator befriends a specialization of itself
3379 "safe" in several library names is misleading
3380 common_type and comparison categories
3381 begin and data must agree for contiguous_range
- No changes needed
3382 NTTP for pair and array
3383 §[time.zone.leap.nonmembers] sys_seconds should be replaced with seconds
3384 transform_view::sentinel has an incorrect operator-
3385 common_iterator is not sufficiently constrained for non-copyable iterators
3387 §[range.reverse.view] reverse_view<V> unintentionally requires range<const V>
3388 view iterator types have ill-formed <=> operators
3389 A move-only iterator still does not have a counted_iterator
3390 make_move_iterator() cannot be used to construct a move_iterator for a move-only iterator
3393 Missing/incorrect feature test macro for coroutines
3395 Definition for three-way comparison needs to be updated (US 152)
3396 Clarify point of reference for source_location::current() (DE 169)
3397 ranges::basic_istream_view::iterator should not provide iterator_category
3398 tuple_element_t is also wrong for const subrange
P2045R1 Missing Mandates for the standard library
P1460R1 Mandating the Standard Library: Clause 20 - Utilities library
P1963R0 Fixing US 313
- No changes needed?
P1983R0 Wording for GB301, US296, US292, US291, and US283
P1981R0 Rename leap to leap_second
P1982R0 Rename link to time_zone_link
P2101R0 'Models' subsumes 'satisfies' (Wording for US298 and US300)
- No changed needed
P1115R3 Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if
P2102R0 Make 'implicit expression variations' more explicit (Wording for US185)
P1994R1 elements_view needs its own sentinel
ppalka has a patch, but see active issue 3406
P1868R2 width: clarifying units of width and precision in std::format
P1956R1 On the names of low-level bit manipulation functions
P1976R2 Fixed-size span construction from dynamic range
P1964R2 Wording for boolean-testable
P2091R0 Issues with range access CPOs
P0586R2 Safe integral comparisons
P1831R1 Deprecating volatile: library
P1973R1 Rename "_default_init" Functions, Rev1
P1243R4 Rangify New Algorithms
P2106R0 Alternative wording for GB315 and GB316
P1739R4 Avoid template bloat for safe_ranges in combination with "subrange-y" view adaptors
ppalka has a patch, but see active issue 3407
P2116R0 Remove tuple-like protocol support from fixed-extent span
P1970R2 Consistency for size() functions: Add ranges::ssize
Changes from Belfast November 2019
3070 path::lexically_relative causes surprising results if a filename can also be a root-name
3103 Errors in taking subview of span should be ill-formed where possible
3149 DefaultConstructible should require default initialization
3190 std::allocator::allocate sometimes returns too little storage
3218 Modifier for %d parse flag does not match POSIX and format specification
3221 Result of year_month arithmetic with months is ambiguous
3222 P0574R1 introduced preconditions on non-existent parameters
3224 zoned_time constructor from TimeZonePtr does not specify initialization of tp_
3225 zoned_time converting constructor shall not be noexcept
3230 Format specifier %y/%Y is missing locale alternative versions
3231 year_month_day_last::day specification does not cover !ok() values
3232 Inconsistency in zoned_time deduction guides
3235 parse manipulator without abbreviation is not callable
3241 chrono-spec grammar ambiguity in §[time.format]
3244 Constraints for Source in §[fs.path.req] insufficiently constrainty
3245 Unnecessary restriction on '%p' parse specifier
3246 What are the constraints on the template parameter of basic_format_arg?
3253 basic_syncbuf::basic_syncbuf() should not be explicit
3256 Feature testing macro for constexpr algorithms
3257 Missing feature testing macro update from P0858
3259 The definition of constexpr iterators should be adjusted
3266 to_chars(bool) should be deleted
3272 %I%p should parse/format duration since midnight
3273 Specify weekday_indexed to range of [0, 7]
3274 Missing feature test macro for <span>
3276 Class split_view::outer_iterator::value_type should inherit from view_interface
3277 Pre-increment on prvalues is not a requirement of weakly_incrementable
P1855R0 Make <compare> freestanding
P1690R1 Refinement Proposal for P0919 Heterogeneous lookup for unordered containers
P1872R0 span should have size_type, not index_type
P1965R0 Blanket Wording for Specifying “Hidden Friends”
P1716R3 ranges compare algorithm are over-constrained
P1869R1 Rename condition_variable_any interruptible wait methods
P1961R0 Harmonizing the definitions of total order for pointers
P1878R1 Constraining Readable Types
P1871R1 Concept traits should be named after concepts
P1456R1 Move-only views
P1391R4 Range constructor for std::string_view
P1394R4 Range constructor for std::span
P1862R1 Ranges adaptors for non-copyable iterators
P1870R1 forwarding-range<T> is too subtle
P1865R1 Add max() to latch and barrier
P1960R0 NB Comment Changes Reviewed by SG1
P1902R1 Missing feature-test macros 2017-2019
P0883R2 Fixing Atomic Initialization
P1959R0 Remove std::weak_equality and std::strong_equality
P1892R1 Extended locale-specific presentation specifiers for std::format
P1645R1 constexpr for <numeric> algorithms
P1718R2 Mandating the Standard Library: Clause 25 - Algorithms library
P1719R2 Mandating the Standard Library: Clause 26 - Numerics library
P1686R2 Mandating the Standard Library: Clause 27 - Time library
P1720R2 Mandating the Standard Library: Clause 28 - Localization library
P1721R2 Mandating the Standard Library: Clause 29 - Input/Output library
P1722R2 Mandating the Standard Library: Clause 30 - Regular Expression library
P1723R2 Mandating the Standard Library: Clause 31 - Atomics library
P1622R3 Mandating the Standard Library: Clause 32 - Thread support library
Changes from Cologne July 2019
2899 is_(nothrow_)move_constructible and tuple, optional and unique_ptr
3055 path::operator+=(single-character) misspecified
3158 tuple(allocator_arg_t, const Alloc&) should be conditionally explicit
3169 ranges permutation generators discard useful information
3183 Normative permission to specialize Ranges variable templates
3184 Inconsistencies in bind_front wording
3185 Uses-allocator construction functions missing constexpr and noexcept
3186 ranges removal, partition, and partial_sort_copy algorithms discard useful information
3187 P0591R4 reverted DR 2586 fixes to scoped_allocator_adaptor::construct()
3191 std::ranges::shuffle synopsis does not match algorithm definition
3196 std::optional<T> is ill-formed is T is an array
3198 Bad constraint on std::span::span()
3199 istream >> bitset<0> fails
3206 year_month_day conversion to sys_days uses not-existing member function
3208 Boolean's expression requirements are ordered inconsistently
3209 Expression in year::ok() returns clause is ill-formed
P1355R2 Exposing a narrow contract for ceil2
P0553R4 Bit operations
P1424R1 constexpr feature macro concerns
P0645R10 Text Formatting
P0631R8 Math Constants
P1135R6 The C++20 Synchronization Library
P1643R1 Add wait/notify to atomic_ref
P1644R0 Add wait/notify to atomic<shared_ptr>
P1466R3 Miscellaneous minor fixes for chrono
P1754R1 Rename concepts to standard_case for C++20, while we still can
P1614R2 The Mothership has Landed
P0325R4 to_array from LFTS with updates
P0408R7 Efficient Access to basic_stringbuf's Buffer
P1423R3 char8_t backward compatibility remediation
P1612R1 Relocate Endian’s Specification
P1661R1 Remove dedicated precalculated hash lookup interface
P1650R0 Output std::chrono::days with 'd' suffix
P1651R0 bind_front should not unwrap reference_wrapper
P1065R2 Constexpr INVOKE
P1207R4 Movability of Single-pass Iterators
P1035R7 Input Range Adaptors
P1522R1 Iterator Difference Type and Integer Overflow
- Work in progress by jwakely and ppalka
P1004R2 Making std::vector constexpr
P0980R1 Making std::string constexpr
P0660R10 Stop Token and Joining Thread, Rev 10
P1474R1 Helpful pointers for ContiguousIterator
P1523R1 Views and Size Types
P0466R5 Layout-compatibility and Pointer-interconvertibility Traits
P1208R6 Adopt source_location for C++20
Changes from Kona Feb 2019
3012 atomic<T> is unimplementable for non-is_trivially_copy_constructible T
3040 basic_string_view::starts_with Effects are incorrect
3077 (push|emplace)_back should invalidate the end iterator
- No changes required
3087 One final &x in §[list.ops]
3101 span's Container constructors need another constraint
3112 system_error and filesystem_error constructors taking a string may not be able to meet their postconditions
3119 Program-definedness of closure types
3133 Modernizing numeric type requirements
- No changes needed
3144 span does not have a const_pointer typedef
3173 Enable CTAD for ref-view
3179 subrange should always model Range
- No changes needed.
3180 Inconsistently named return type for ranges::minmax_element
3182 Specification of Same could be clearer
P0339R6 polymorphic_allocator<> as a vocabulary type
P0340R3 Making std::underlying_type SFINAE-friendly
P0738R2 I Stream, You Stream, We All Stream for istream_iterator
P1458R1 Mandating the Standard Library: Clause 16 - Language support library
- No changes needed
P1459R1 Mandating the Standard Library: Clause 18 - Diagnostics library
- No changes needed
P1462R1 Mandating the Standard Library: Clause 20 - Strings library
- No changes needed
P1463R1 Mandating the Standard Library: Clause 21 - Containers library
Must enforce is_same_v<allocator_type::value_type, value_type> in C++20 mode
P1464R1 Mandating the Standard Library: Clause 22 - Iterators library
Need to constrain operators for reverse_iterator and move_iterator
P1164R1 Make create_directory() Intuitive
P1001R2 Target Vectorization Policies from Parallelism V2 TS to C++20
P1227R2 Signed ssize() functions, unsigned size() functions
P1252R2 Ranges Design Cleanup
P1024R3 Usability Enhancements for std::span
P0920R2 Precalculated hash values in lookup
P1357R1 Traits for [Un]bounded Arrays
P0052R10 Generic Scope Guard and RAII Wrapper for the Standard Library (Library Fundamentals)
Changes from San Diego Nov 2018
2960 [fund.ts.v3] nonesuch is insufficiently useless
P1210R0 Completing the Rebase of Library Fundamentals, Version 3, Working Draft
2183. Muddled allocator requirements for match_results constructors
- No changes required
2184. Muddled allocator requirements for match_results assignments
- No changes required
2412. promise::set_value() and promise::get_future() should not race
2682. filesystem::copy() won't create a symlink to a directory
2936. Path comparison is defined in terms of the generic format
2943. Problematic specification of the wide version of basic_filebuf::open
2995. basic_stringbuf default constructor forbids it from using SSO capacity
2996. Missing rvalue overloads for shared_ptr operations
3008. make_shared (sub)object destruction semantics are not specified
3025. Map-like container deduction guides should use pair<Key, T>, not pair<const Key, T>
3031. Algorithms and predicates with non-const reference arguments
3037. polymorphic_allocator and incomplete types
- No changes required
3038. polymorphic_allocator::allocate should not allow integer overflow to create vulnerabilities
3054. uninitialized_copy appears to not be able to meet its exception-safety guarantee
3065. LWG 2989 missed that all path's other operators should be hidden friends as well
3096. path::lexically_relative is confused by trailing slashes
3116. OUTERMOST_ALLOC_TRAITS needs remove_reference_t
3122. __cpp_lib_chrono_udls was accidentally dropped
3127. basic_osyncstream::rdbuf needs a const_cast
3128. strstream::rdbuf needs a const_cast
- No changes required
3129. regex_token_iterator constructor uses wrong pointer arithmetic
3130. §[input.output] needs many addressof
3131. addressof all the things
3132. Library needs to ban macros named expects or ensures
- No changes required
3137. Header for __cpp_lib_to_chars
3140. COMMON_REF is unimplementable as specified
3145. file_clock breaks ABI for C++17 implementations
3147. Definitions of "likely" and "unlikely" are likely to cause problems
- No changes needed
3148. <concepts> should be freestanding
3153. Common and common_type have too little in common
3154. Common and CommonReference have a common defect
3160. atomic_ref() = delete; should be deleted
P1123R0 Editorial Guidance for merging P0019r8 and P0528r3
- Nothing to do
P0487R1 Fixing operator>>(basic_istream&, CharT*) (LWG 2499)
P0602R4 variant and optional should propagate copy/move triviality
P0655R1 visit<R>: Explicit Return Type for visit
P0972R0 <chrono> zero(), min(), and max() should be noexcept
P1006R1 Constexpr in std::pointer_traits
P1032R1 Misc constexpr bits
P1148R0 Cleaning up Clause 20
- [char.traits] p3 now says "If X::char_type is not the same type as C, the program is ill-formed." Need to enforce that in basic_string and iostreams.
P0318R1 unwrap_ref_decay and unwrap_reference
P0357R3 reference_wrapper for incomplete types
P0608R3 A sane variant converting constructor
P0771R1 std::function move constructor should be noexcept
P1007R3 std::assume_aligned
P1020R1 Smart pointer creation with default initialization
P1285R0 Improving Completeness Requirements for Type Traits
P1248R1 Remove CommonReference requirement from StrictWeakOrdering (a.k.a Fixing Relations)
P0591R4 Utility functions to implement uses-allocator construction
P0899R1 LWG 3016 is Not a Defect
P1085R2 Should Span be Regular?
P1165R1 Make stateful allocator propagation more consistent for operator+(basic_string)
P0896R4 The One Ranges Proposal
P0356R5 Simplified partial function application
P0919R3 Heterogeneous lookup for unordered containers
P1209R0 Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20
Changes from Rapperswil Jun 2018
(some of these are done, but this list needs to be updated)
2139 What is a user-defined type?
- No changes required
2970 Return type of std::visit misspecified
3058 Parallel adjacent_difference shouldn't require creating temporaries
3062 Unnecessary decay_t in is_execution_policy_v should be remove_cvref_t
reported upstream as https://bugs.llvm.org/show_bug.cgi?id=41591
3067 recursive_directory_iterator::pop must invalidate
3074 Non-member functions for valarray should only deduce from the valarray
3076 basic_string CTAD ambiguity
3079 LWG 2935 forgot to fix the existing_p overloads of create_directory
3080 Floating point from_chars pattern specification breaks round-tripping
3083 What should ios::iword(-1) do?
3094 §[time.duration.io]p4 makes surprising claims about encoding
3100 Unnecessary and confusing "empty span" wording
3102 Clarify span iterator and const_iterator behavior
3104 Fixing duration division
P0475R1 LWG 2511: guaranteed copy elision for piecewise construction
P0476R2 Bit-casting object representations
P0788R3 Standard Library Specification in a Concepts and Contracts World
P0458R2 Checking for Existence of an Element in Associative Containers
P0759R1 fpos Requirements
- Nothing to do?
P1023R0 constexpr comparison operators for std::array
P0769R2 Add shift to <algorithm>
P0887R1 The identity metafunction
P0879R0 Constexpr for swap and swap related functions
P0758R1 Implicit conversion traits and utility functions
P0556R3 Integral power-of-2 operations
P0019R8 Atomic Ref
P0935R0 Eradicating unnecessarily explicit default constructors from the standard library
P0646R1 Improving the Return Value of Erase-Like Algorithms
P0619R4 Reviewing Deprecated Facilities of C++17 for C++20
P0898R3 Standard Library Concepts
Changes from Jacksonville Feb 2018
(some of these are done, but this list needs to be updated)
2164 What are the semantics of vector.emplace(vector.begin(), vector.back())?
2243 istream::putback problem
2816 resize_file has impossible postcondition
2843 Unclear behavior of std::pmr::memory_resource::do_allocate()
2849 Why does !is_regular_file(from) cause copy_file to report a "file already exists" error?
2851 std::filesystem enum classes are now underspecified
2969 polymorphic_allocator::construct() shouldn't pass resource()
2975 Missing case for pair construction in scoped and polymorphic allocators
2989 path's stream insertion operator lets you insert everything under the sun
3000 monotonic_memory_resource::do_is_equal uses dynamic_cast unnecessarily
3004 §[string.capacity] and §[vector.capacity] should specify time complexity for capacity()
3005 Destruction order of arrays by make_shared/allocate_shared only recommended?
3007 allocate_shared should rebind allocator to cv-unqualified value_type for construction
3009 Including <string_view> doesn't provide std::size/empty/data
3013 (recursive_)directory_iterator construction and traversal should not be noexcept
3014 More noexcept issues with filesystem operations
3015 copy_options::unspecified underspecified
-((3017 list splice functions should use addressof)--
3026 filesystem::weakly_canonical still defined in terms of canonical(p, base)
3030 Who shall meet the requirements of try_lock?
3035 std::allocator's constructors should be constexpr
- No changes required
3039 Unnecessary decay in thread and packaged_task
3041 Unnecessary decay in reference_wrapper
3042 is_literal_type_v should be inline
- No changes required
3043 Bogus postcondition for filesystem_error constructor
3045 atomic<floating-point> doesn't have value_type or difference_type
3048 transform_reduce(exec, first1, last1, first2, init) discards execution policy
3051 Floating point classifications were inadvertently changed in P0175
2946 LWG 2758's resolution missed further corrections
3075 basic_string needs deduction guides from basic_string_view
P0754R2 <version>
P0809R0 Comparing Unordered Containers (resolves LWG#2831)
P0355R7 Extending chrono to Calendars and Time Zones
P0966R1 string::reserve Should Not Shrink
P0551R3 Thou Shalt Not Specialize std Function Templates!
P0753R2 Manipulators for C++ Synchronized Buffered Ostream
P0122R7 <span>
P0858R0 Constexpr iterator requirements
Changes from Albuquerque Nov 2017
(some of these are done, but this list needs to be updated)
2950 std::byte operations are misspecified
2952 iterator_traits should work for pointers to cv T
2953 LWG 2853 should apply to deque::erase too
2964 Apparently redundant requirement for dynamic_pointer_cast
2965 Non-existing path::native_string() in filesystem_error::what() specification
2972 What is is_trivially_destructible_v<int>?
- No changes required
2976 Dangling uses_allocator specialization for packaged_task
2977 unordered_meow::merge() has incorrect Throws: clause
2978 Hash support for pmr::string and friends
2979 aligned_union should require complete object types
2980 Cannot compare_exchange empty pointers
2981 Remove redundant deduction guides from standard library
2982 Making size_type consistent in associative container deduction guides
2988 Clause 32 cleanup missed one typename
2993 reference_wrapper<T> conversion from T&&
2998 Requirements on function objects passed to {forward_,}list-specific algorithms
3001 weak_ptr::element_type needs remove_extent_t
3024 variant's copies must be deleted instead of disabled via SFINAE
2958 Moves improperly defined as deleted
- No changes required
P0550R2 Transformation Trait remove_cvref
P0777R1 Treating Unnecessary decay
P0600R1 nodiscard in the Library
P0439R0 Make std::memory_order a scoped enumeration
P0053R7 C++ Synchronized Buffered Ostream
P0653R2 Utility to convert a pointer to a raw pointer
P0202R3 Add constexpr modifiers to functions in <algorithm> and <utility> Headers
P0415R1 Constexpr for std::complex
P0718R2 Atomic shared_ptr
P0020R6 Floating Point Atomic
P0616R0 de-pessimize legacy <numeric> algorithms with std::move
P0457R2 String Prefix and Suffix Checking
Changes from Toronto July 2017
2901 Variants cannot properly support allocators
- No changes required
2956 filesystem::canonical() still defined in terms of absolute(p, base)--)
--(P0463R1 Endian just Endian
P0682R1 Repairing elementary string conversions
P0739R0 Some improvements to class template argument deduction integration into the standard library
P0674R1 Extending make_shared to Support Arrays
Changes from Kona Feb/Mar 2017
P0298R3. A byte type definition.
Done in r246005
2260. Missing requirement for Allocator::pointer
- We already rely on this, should be nothing to do.
2768. any_cast and move semantics
Already done? (VilleVoutilainen says: yes, done by LWG 2509 r238022, the extra parts that 2768 drops are QoI)
2769. Redundant const in the return type of any_cast(const any&)
Already done? (VilleVoutilainen says: yes, done in r243739)
2781. Contradictory requirements for std::function and std::reference_wrapper
Done in r244364
2782. scoped_allocator_adaptor constructors must be constrained
Done in r241169
2784. Resolution to LWG 2484 is missing "otherwise, no effects" and is hard to parse
- Nothing to do
2785. quoted should work with basic_string_view
2786. Annex C should mention shared_ptr changes for array support
- Nothing to do
2787. §[file_status.cons] doesn't match class definition
2789. Equivalence of contained objects
- Nothing to do
2794. Missing requirements for allocator pointers
- Nothing to do
2795. §[global.functions] provides incorrect example of ADL use
- Nothing to do
2804. Unconditional constexpr default constructor for istream_iterator
- No change needed
2812. Range access is available with <string_view>
- No change needed
2824. list::sort should say that the order of elements is unspecified if an exception is thrown
- No change needed
2826. string_view iterators use old wording
- No change needed
2834. Resolution LWG 2223 is missing wording about end iterators
- No change needed
2835. LWG 2536 seems to misspecify <tgmath.h>
- No change needed?
2837. gcd and lcm should support a wider range of input values
2838. is_literal_type specification needs a little cleanup
- Nothing to do?
2842. in_place_t check for optional::optional(U&&) should decay U
done? (VilleVoutilainen says: Yes, r243966)
2850. std::function move constructor does unnecessary work
- Already works this way
2853. Possible inconsistency in specification of erase in [vector.modifiers]
- Nothing to do?
2855. std::throw_with_nested("string_literal")
- Done
2796. tuple should be a literal type
- Seems to be true already.
2790. Missing specification of istreambuf_iterator::operator->
- We never implemented the removed operator, should be nothing to do.
2676. Provide filesystem::path overloads for File-based streams
P0317R1 (Directory Entry Caching for Filesystem).
P0492R2 (Proposed Resolution of C++17 National Body Comments for Filesystems)
P0430R2 (File system library on non-POSIX-like operating systems)
P0604R0 (Resolving GB 55, US 84, US 85, US 86)
Done in r246036
P0607R0 (Inline Variables for the Standard Library)
Done in r246423
P0618R0 (Deprecating <codecvt>)
- No need to actually do anything
P0181R1 "Ordered By Default"
- Was never implemented, no need to revert anything.
P0156R2 (Variadic Lock guard)
Done in r245903
P0599R1 (noexcept for hash functions)
- Done?
P0433R2 (Integrating template deduction for class templates into the standard library)
2872. Add definition for direct-non-list-initialization US 107
2890. The definition of 'object state' applies only to class types US 111
2866. Incorrect derived classes constraints GB 36
2857. {variant,optional,any}::emplace should return the constructed value r246182
2900. The copy and move constructors of optional are not constexpr US 111 r246556
2903. The form of initialization for the emplace-constructors is not specified US 118
2904. Make variant move-assignment more exception safe CH 7
2868. Missing specification of bad_any_cast::what() GB 54
- No change needed.
2905. is_constructible_v<unique_ptr<P, D>, P, D const &> should be false when D is not copy constructible US 123
2873. Add noexcept to several shared_ptr related functions US 124
2802. shared_ptr constructor requirements for a deleter US 127
2874. Constructor shared_ptr::shared_ptr(Y*) should be constrained US 125
2875. shared_ptr::shared_ptr(Y* | D | […]) constructors should be constrained US 126
2876. shared_ptr::shared_ptr(const weak_ptr<Y>&) constructor should be constrained US 129
2908. The less-than operator for shared pointers could do more US 135
- Nothing to do?
2807. std::invoke should use std::is_nothrow_callable GB 53
2861. basic_string should require that charT match traits::char_type US 145
2788. basic_string range mutators unintentionally require a default constructible allocator
2878. Missing DefaultConstructible requirement for istream_iterator default constructor US 153
2921. packaged_task and type-erased allocators US 165
2911. An is_aggregate type trait is needed US 143
P0558R1 (Resolving atomic<T> named base class inconsistencies).
- Nothing to do?
P0548R1 (common_type and duration)
Changes from Issaquah Nov 2016
2221. No formatted output operator for nullptr See PR54043 and partial patch without symbol additions
2261. Are containers required to use their 'pointer' type internally?
JonathanWakely has patches for this
2503. multiline option should be added to syntax_option_type
2534. Constrain rvalue stream operators
naïve attempt to constrain them causes infinite recursion done
2686. Why is std::hash specialized for error_code, but not error_condition?
2770. tuple_size<const T> specialization is not SFINAE compatible and breaks decomposition declarations
2773. Making std::ignore constexpr
2777. basic_string_view::copy should use char_traits::copy
2778. basic_string_view is missing constexpr
- done
P0426R1 Constexpr for std::char_traits
- done
P0403R1 Literal suffixes for basic_string_view
- done
P0505R0 (Wording for GB 50 - constexpr for chrono).
- done.
P0418R2 Fail or succeed: there is no atomic lattice. (This also resolves LWG issue 2445)
P0508R0 Wording for GB 58 - structured bindings for node_handles
- no changes required
P0503R0 Correcting library usage of "literal type"
- no changes required
P0414R2 (Merging shared_ptr changes from Library Fundamentals to C++17) and P0497R0 (Fixes to shared_ptr support for arrays).
- done
P0504R0 (Revisiting in-place tag types for any/optional/variant
- done
P0003R5 Removing Deprecated Exception Specifications from C++17
- no changes required
P0510R0 Disallowing references, incomplete types, arrays, and empty variants
- done
P0516R0 Clarify That shared_future's Copy Operations have Wide Contracts
- done
P0509R1 Updating "Restrictions on exception handling"
- No changes needed
P0502R0 Throwing out of a parallel algorithm terminates—but how?
- Parallel algos not implemented
P0517R0 Make future_error Constructible
- done
P0521R0 shared_ptr use_count/unique
- No changes required
P0513R0 Poisoning the Hash (Also resolves LWG 2791 and LWG 2543).
P0067R5 Elementary string conversions
- Only done for integer types, missing floating point support.
P0435R1 Resolving LWG Issues re common_type. Resolves LWG issues 2465 and 2763.
Changes from Oulu Jun 2016
2549 Tuple EXPLICIT constructor templates that take tuple parameters end up taking references to temporaries and will create dangling references
2393 std::function's Callable definition is broken
2542 Missing const requirements for associative containers
2436 Comparators for associative containers should always be CopyConstructible
2550 Wording of unordered container's clear() method complexity
2310 Public exposition only member in std::array
- No changes needed
2181 Exceptions from seed sequence operations
- No changes needed
2328 Rvalue stream extraction should use perfect forwarding
2667 path::root_directory() description is confusing
2669 recursive_directory_iterator effects refers to non-existent functions
2671 Errors in Copy
2673 status() effects cannot be implemented as specified
2670 system_complete refers to undefined variable 'base'
2441 Exact-width atomic typedefs should be provided
2426 Issue about compare_exchange
2309 mutex::lock() should not throw device_or_resource_busy
2710 "Effects: Equivalent to ..." doesn't count "Synchronization:" as determined semantics
2685 shared_ptr deleters must not throw on move construction
2698 Effect of assign() on iterators/pointers/references
2596 vector::data() should use addressof
2684 priority_queue lacking comparator typedef
2689 Parallel versions of std::copy and std::move shouldn't be in order
2688 clamp misses preconditions and has extraneous condition on result
2707 path construction and assignment should have "string_type&&" overloads
2674 Bidirectional iterator requirement on path::iterator is very expensive
2706 Error reporting for recursive_directory_iterator::pop() is under-specified
2683 filesystem::copy() says "no effects"
2555 [fund.ts.v2] No handling for over-aligned types in optional
2451 [fund.ts.v2] optional should 'forward' T's implicit conversions
2573 [fund.ts.v2] std::hash<std::experimental::shared_ptr> does not work for arrays
2551 [fund.ts.v2] "Exception safety" cleanup in library fundamentals required
2516 [fund.ts.v2] Public "exposition only" members in observer_ptr
2509 [fund.ts.v2] any_cast doesn't work with rvalue reference targets and cannot move with a value target
2687 {inclusive,exclusive}_scan misspecified
2704 recursive_directory_iterator's members should require '*this is dereferenceable'
2711 path is convertible from approximately everything under the sun
2725 filesystem::exists(const path&, error_code&) error reporting
2312 tuple's constructor constraints need to be phrased more precisely
- No changes required
2422 std::numeric_limits<T>::is_modulo description: "most machines" errata
2709 offsetof is unnecessarily imprecise
2716 Specification of shuffle and sample disallows lvalue URNGs
2718 Parallelism bug in [algorithms.parallel.exec] p2
2719 permissions function should not be noexcept due to narrow contract
2720 permissions function incorrectly specified for symlinks
2721 remove_all has incorrect post conditions
2723 Do directory_iterator and recursive_directory_iterator become the end iterator upon error?
2724 The protected virtual member functions of memory_resource should be private
- No changes required
2726 [recursive_]directory_iterator::increment(error_code&) is underspecified
2727 Parallel algorithms with constexpr specifier
2728 status(p).permissions() and symlink_status(p).permissions() are not specified
p0063r3, C++17 should refer to C11 instead of C99
p0175r1, Synopses for the C library
p0088r3, Variant: a type-safe union for C++17
p0307r2, Making Optional Greater Equal Again
p0393r3, Making Variant Greater Equal
p0032r3, Homogeneous interface for variant, any and optional
p0067r3, Elementary string conversions
superseded by P0067R5 (above)
p0254r2, Integrating std::string_view and std::string
p0258R2, has_unique_object_representations
p0040r3, Extending memory management tools
p0084r2, Emplace Return Type
p0302r1, Removing Allocator Support in std::function
p0083r3, Splicing Maps and Sets
p0181r1, Ordered by Default
- change was reverted
p0163r0, shared_ptr::weak_type
p0209r2, make_from_tuple: apply for construction
p0295r0, Adopt Selected Library Fundamentals V2 Components for C++17
p0337r0, Delete operator= for polymorphic_allocator
p0358r1, Fixes for not_fn
p0219r1, Relative Paths for Filesystem
p0392r0, Adapting string_view by filesystem paths
P0394r4, Hotel Parallelifornia: terminate() for Parallel Algorithms Exception Handling
p0336r1, Better Names for Parallel Execution Policies in C++17
p0371r1, Temporarily discourage memory_order_consume
- nothing to do
p0346r1, A <random> Nomenclature Tweak
- nothing to do
p0180r2, Reserve a New Library Namespace for Future Standardization
- nothing to do
Changes from Jacksonville Feb/Mar 2016
2276 Missing requirement on std::promise::set_exception
2523 std::promise synopsis shows two set_value_at_thread_exit()'s for no apparent reason
2537 Constructors for priority_queue taking allocators should call make_heap
2192 Validity and return type of std::abs(0u) is unclear
2450 (greater less greater_equal less_equal)<void> do not yield a total order for pointers
2520 N4089 broke initializing unique_ptr<T[]> from a nullptr
2545 Simplify wording for bind without explicitly specified return type
2557 Logical operator traits are broken in the zero-argument case
2559 Error in LWG 2234's resolution
- Nothing to do
2560 is_constructible underspecified when applied to a function type
2565 std::function's move constructor should guarantee nothrow for reference_wrappers and function pointers
2566 Requirements on the first template parameter of container adaptors
2571 [map.modifiers]/2 imposes nonsensical requirement on insert(InputIterator, InputIterator)
2572 The remarks for shared_ptr::operator* should apply to cv-qualified void as well
- nothing to do
2576 istream_iterator and ostream_iterator should use std::addressof
2577 {shared,unique}_lock should use std::addressof
2579 Inconsistency wrt Allocators in basic_string assignment vs. basic_string::assign
2581 Specialization of <type_traits> variable templates should be prohibited
- nothing to do
2582 [res.on.functions]/2's prohibition against incomplete types shouldn't apply to type traits
2583 There is no way to supply an allocator for basic_string(str, pos)
2585 forward_list::resize(size_type, const value_type&) effects incorrect
2586 Wrong value category used in scoped_allocator_adaptor::construct()
2590 Aggregate initialization for std::array
2522 [fund.ts.v2] Contradiction in set_default_resource specification
2539 [fund.ts.v2] invocation_trait definition definition doesn't work for surrogate call functions
2558 [fund.ts.v2] Logical operator traits are broken in the zero-argument case
2574 [fund.ts.v2] std::experimental::function::operator=(F&&) should be constrained
2575 [fund.ts.v2] experimental::function::assign should be removed
P0024R2, The Parallelism TS Should be Standardized.
P0226R1, Mathematical Special Functions for C++17, v5.
P0220R1, Adopt Library Fundamentals V1 TS Components for C++17 (R1).
- partially done
P0218R0, Adopt the File System TS for C++17.
P0033R1, Re-enabling shared_from_this (revision 1).
P0005R4, Adopt not_fn from Library Fundamentals 2 for C++17.
P0152R1, constexpr atomic::is_always_lock_free.
P0185R1, Adding [nothrow-]swappable traits, revision 3.
P0253R1, Fixing a design mistake in the searchers interface.
P0025R0, An algorithm to "clamp" a value between a pair of boundary values
P0154R1, constexpr std::hardware_{constructive,destructive}_interference_size
option #2 in P0030R1?, Proposal to Introduce a 3-Argument Overload to std::hypot
P0031R0, A Proposal to Add Constexpr Modifiers to reverse_iterator, move_iterator, array and Range Access and apply the resolution of LWG Issue 2296
P0272R1, Give 'std::string' a non-const '.data()' member function.
P0077R2, is_callable, the missing INVOKE related trait.
Changes from Kona Nov 2015
1169 num_get not fully compatible with strto*
2072 Unclear wording about capacity of temporary buffers
- No changes needed
2101 Some transformation types can produce impossible types
2111 Which unexpected/terminate handler is called from the exception handling runtime?
2119 Missing hash specializations for extended integer types
2127 Move-construction with raw_storage_iterator
2133 Attitude to overloaded comma for iterators
2156 Unordered containers' reserve(n) reserves for n-1 elements
2218 Unclear how containers use allocator_traits::construct()
2219 INVOKE-ing a pointer to member with a reference_wrapper as the object expression
2244 Issue on basic_istream::seekg
2259 Issues in 17.6.5.5 rules for member functions
- nothing to do
2336 is_trivially_constructible/is_trivially_assignable traits are always false
- nothing to do
2367 pair and tuple are not correctly implemented for is_constructible with no args
2380 May <cstdlib> provide long ::abs(long) and long long ::abs(long long)?
2384 Allocator's deallocate function needs better specification
2385 function::assign allocator argument doesn't make sense
2435 reference_wrapper::operator()'s Remark should be deleted
2447 Allocators and volatile-qualified value types
consider adding static assert to enforce it? https://gcc.gnu.org/PR48101
2462 std::ios_base::failure is overspecified
2466 allocator_traits::max_size() default behavior is incorrect
2469 Wrong specification of Requires clause of operator[] for map and unordered_map
Let's keep this open for a bit. There's otherwise nothing to do, but the code could use a cleanup, like removing the duplication of "if (__i == end() || key_comp()(__k, (*__i).first))" eight times.
2473 basic_filebuf's relation to C FILE semantics
(2476 scoped_allocator_adaptor is not assignable
2477 Inconsistency of wordings in std::vector::erase() and std::deque::erase()
- nothing to do
2483 throw_with_nested() should use is_final
2484 rethrow_if_nested() is doubly unimplementable
2486 mem_fn() should be required to use perfect forwarding
2487 bind() should be const-overloaded, not cv-overloaded
- libstdc++ ships the volatile overloads as deprecated extensions
2489 mem_fn() should be noexcept
2492 Clarify requirements for comp
- nothing to do
2224 Ambiguous status of access to non-live objects
- nothing to do
2234 assert() should allow usage in constant expressions
2273 regex_match ambiguity
2495 There is no such thing as an Exception Safety element
- nothing to do
P0004R1, Remove Deprecated iostreams aliases.
P0006R0, Adopt Type Traits Variable Templates for C++17.
P0092R1, Polishing <chrono>.
P0007R1, Constant View: A proposal for a std::as_const helper function template.
P0156R0, Variadic lock_guard(rev 3).
p0074r0, Making std::owner_less more flexible
P0013R1, Logical type traits rev 2
2494 [fund.ts.v2] ostream_joiner needs noexcept
2500 [fund.ts.v2] fundts.memory.smartptr.shared.obs/6 should apply to _cv_-unqualified void
2515 [fund.ts.v2] Certain comparison operators of observer_ptr do not match synopsis
2517 [fund.ts.v2] Two propagate_const assignment operators have incorrect return type
2526 [fund.ts] Incorrect precondition for experimental::function::swap
n4531, std::rand replacement, revision 3.
P0013R1, Logical type traits rev 2
FIXME
Parallel Mode doesn't support move-only types
A number of tests contain the following, which should be addressed by making Parallel Mode C++11-compatible:
// XXX FIXME: parallel-mode should deal correctly with moveable-only types
// per C++0x, at minimum smoothly fall back to serial.