Differences between revisions 204 and 205
Revision 204 as of 2020-03-12 15:40:20
Size: 75783
Editor: PatrickPalka
Comment: Cross out issue 3286
Revision 205 as of 2020-03-25 17:40:28
Size: 75789
Editor: PatrickPalka
Comment: cross out P1645R1
Deletions are marked like this. Additions are marked like this.
Line 218: Line 218:
 * [[https://wg21.link/p1645r1 | P1645R1]] constexpr for <numeric> algorithms  * --([[https://wg21.link/p1645r1 | P1645R1]] constexpr for <numeric> algorithms)--

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 (and maybe switch to using markdown for formatting within comments?)

Unimplemented changes

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

  • 3349 Missing __cpp_lib_constexpr_complex for P0415R1

  • 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

  • 3202 P0318R1 was supposed to be revised

  • 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

    • Partially done, jwakely working on the rest
  • 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

  • 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?

  • 3034 P0767R1 breaks previously-standard-layout types

  • 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.

  • 2260. Missing requirement for Allocator::pointer

    • We already rely on this, should be nothing to do.
  • 2768. any_cast and move semantics

  • 2769. Redundant const in the return type of any_cast(const any&)

  • 2781. Contradictory requirements for std::function and std::reference_wrapper

  • 2782. scoped_allocator_adaptor constructors must be constrained

  • 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

  • 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)

  • P0607R0 (Inline Variables for the Standard Library)

  • 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)

  • 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

  • 2806. Base class of bad_optional_access GB 49 r246103

  • 2934. optional<const T> doesn't compare with T r246076

  • 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.
  • 2801. Default-constructibility of unique_ptr US 122 r244054

  • 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?

  • 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?

  • 2749. swappable traits for variants r243120

  • 2759. gcd / lcm and bool for the WP r254736

  • 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

  • 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

  • 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

  • 2250 Follow-up On Library Issue 2207

  • 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
  • 2353 std::next is over-constrained r254957

  • 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

  • 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

  • 2485 get() should be overloaded for const tuple&& r254222

  • 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.

None: LibstdcxxTodo (last edited 2020-11-18 16:58:47 by PatrickPalka)