cpp_proposals icon indicating copy to clipboard operation
cpp_proposals copied to clipboard

My WG21 proposals

Just a bunch of proposals for standardization that I've worked on. This is probably not up to date, since I always forget to push. Rendered here.

As of pre-Cologne 2019, I use mpark/wg21 to make all of my papers.

Accepted to Working Draft

C++20

  • p0704r1 - Fixing const-qualified pointers to members.
  • p0780r2 - Allow pack expansion in lambda init-capture. There is a core issue (CWG 2378) as a pack of references is currently specified as ...&id instead of &...id.
  • p0848r3 - Conditionally Trivial Special Member Functions, with Casey Carter.
  • p0892r2 - explicit(bool), with STL.
  • p1065r2 - constexpr INVOKE, with Tomasz Kamiński.
  • p1185r2 - <=> != ==. Splitting == and <=>.
  • p1186r3 - When do you actually use <=>?. A helper feature to make it easier to adopt <=>.
  • p1187r0 - A type trait for std::compare_3way()'s type.
  • p1188r0 - Library utilities for <=>.
  • p1189r0 - Adding <=> to library.
  • p1614r2 - The Mothership Has Landed. The one library wording paper for everything <=> related (including many papers that are not mine).
  • p1630r1 - Spaceship needs a tuneup. A paper addressing several <=>-related issues that have come up.
  • p1870r1 - forwarding-range<T> is too subtle.
  • p1871r1 - Concept traits should be named after concepts.
  • p1946r0 - Allow defaulting comparisons by value.
  • p1959r0 - Remove std::weak_equality and std::strong_equality.
  • p2095r0 - Resolve lambda init-capture pack grammar (CWG2378).

DRs against C++20 (or earlier)

  • p2017r1 - Conditionally borrowed ranges.
  • p2036r3 - Change scope of lambda trailing-return-type.
  • p2162r2 - Inheriting from std::variant.
  • p2210r2 - Superior String Splitting.
  • p2231r1 - Missing constexpr in std::optional and std::variant.
  • p2280r4 - Using unknown references in constant expressions.-
  • p2325r3 - Views should not be required to be default constructible.
  • p2415r2 - What is a view?
  • p2493r0 - Missing feature test macros for C++20 core papers
  • p2564r3 - consteval needs to propagate up.

C++23

  • p0847r7 - Deducing this, with Simon Brand, Gašper Ažman, and Ben Deane.
  • p1169r4 - static operator(), with Casey Carter.
  • p1938r3 - if consteval, with Richard Smith, Andrew Sutton, and Daveed Vandevoorde.
  • p2278r4 - cbegin should always return a constant iterator (LWG already approved).
  • p2286r8 - Formatting Ranges.
  • p2322r6 - ranges::fold.
  • p2387r3 - Pipe support for user-defined range adaptors.
  • p2441r2 - views::join_with
  • p2446r2 - views::as_rvalue (LWG already approved).
  • p2448r2 - Relaxing some constexpr restrictions.
  • p2508r2 - Expose std::basic-format-string<charT, Args...>.
  • p2520r0 - move_iterator<T*> should be a random access iterator.
  • p2585r1 - Improve default container formatting.
  • p2602r1 - Poison Pills are Too Toxic.
  • p2647r1 - Permitting static constexpr variables in constexpr functions.

Pending Plenary

None.

Pending CWG/LWG Review

  • p1061r3 - Structured bindings can introduce a Pack, with Jonathan Wakely.
  • p2593r1 - Allowing static_assert(false)

Pending EWG/LEWG Voting

None.

Pending EWG/LEWG Review

  • p2484r0 - Extending support for class types as non-type template parameters
  • p2561r1 - An error propagation operator
  • p2637r1 - Member visit.
  • p2641r1 - Checking if a union alternative is active.

Ongoing Plans

  • p2214r2 - A Plan for C++23 Ranges, with Conor Hoekstra and Tim Song.

Figure out packs outside of templates?

  • p1858r2 - Generalized pack declarations and usage.
  • p2277r0 - Packs outside of templates.
  • p2120r0 - Simplified structured bindings protocol with pack aliases. Splitting off the structured bindings part from p1858.

Concepts

  • p1900r0 - Concepts-adjacent problems.
  • p2279r0 - We need a language mechanism for customization points.

Other

  • d2011r2 - A pipeline-rewrite operator, with Colby Pike.
  • p2287r1 - Designated-initializers for Base Classes.
  • p2481r1 - Forwarding reference to specific type/template.

Rejected

  • p0321r1 - Make pointers to members callable. Rejected in Toronto.
  • p0573r2 - Abbreviated Lambdas, with Tomasz Kamiński. Rejected in Albuquerque.
  • p0644r1 - Forward without forward. Rejected in Albuquerque.
  • p0893r1 - Chaining comparisons, with Herb Sutter. Rejected in San Diego.

On Hold

  • p1170r0 - Overload sets as function parameters, with Andrew Sutton. Need to reconsider the design.
  • p2089r0 - Function parameter constraints are fragile. The proposal this responds to was tabled.
  • p2550r1 - ranges::copy should say output_iterator somewhere.