Skip to content

vNext Planning

Stephan T. Lavavej edited this page Feb 23, 2025 · 26 revisions

Salvage The Old vNext Branch

  • Multithreading overhaul
  • Iterator debugging overhaul (doubly-linked iterator chains, no proxy allocations)
    • Still need to overhaul deque and vector<bool>
    • Also simplifies checked/unchecked and modifiable/const, avoiding inheritance (which is non-standard)
  • Remove /clr:pure
  • Flat C exports
  • Remove <experimental/filesystem>
    • Has a large separately compiled component.
  • Remove <hash_map>, <hash_set>
    • This could be done without breaking ABI.
  • Remove tr1
    • This could be done without breaking ABI.
  • Other changes?
  • Don't salvage "vcplatform" - it has been superseded

Major Overhauls

  • <regex>
  • <deque>
  • <unordered_map>, <unordered_set>
  • iostreams floating-point
  • <tuple>
    • Specifically, implementing compression and eliminating the recursive inheritance

More Work

  • vNext Issues
    • Especially this #169 comment.
    • #938 P0408R7 Efficient Access To basic_stringbuf's Buffer can be significantly simplified
  • TRANSITION, ABI comments
  • Consolidate satellite DLL and import LIB code back into the main DLL (and API loading code like for ICU); make sure to keep vector/string etc. out of the DLL/import LIB.
  • Eradicate the last traces of XP/Vista/etc. support
  • Remove _app DLLs
  • Drop IDL=1
  • <variant> changes:
    • Store index() + 1 instead of index() to so the range of possible stored values is contiguous for minor codegen improvements.
    • The hash value of a variant should depend on its index() as well as the stored value so variant<int, int>{in_place_index<0>, 42} and variant<int, int>{in_place_index<1>, 42} don't collide.
  • [[no_unique_address]] will be unconditionally available, allowing us to replace _Compressed_pair and improve the representations of more types.
  • iomanip.cpp doesn't need to be separately compiled
  • Unnecessary padding in _Ctypevec (was #426)
  • Likely unnecessary padding in basic_istream
  • Ensure that future<const T> and promise<const T> work with the overhauled representation (was #2599)
  • We should regularly add exports to prevent people from assuming they can use old DLLs
  • The /ALTERNATENAME machinery is a trainwreck of complexity; consider removing it
  • Figure out a "no exceptions" story and clean out the weirdness of _HAS_EXCEPTIONS=0.

Compiler Work

  • Remove /Za (effectively superseded by /permissive-)
  • Remove /Zc:wchar_t-
  • Increase minimum Standard version to C++17 or C++20?
  • RTTI overhaul?
  • EH overhaul possible? (Table-based x86?)
  • Fix Empty Base Class Optimization
  • Avoid ABI-breaking options (e.g. /vd2, /vmg, /J)
  • How do we detect/prevent mixing?

ABI-Breaking Developer Community Tickets