Skip to content

vNext Planning

Stephan T. Lavavej edited this page Aug 2, 2024 · 23 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 <hash_map>, <hash_set>
  • Remove tr1
  • Other changes?

Major Overhauls

  • <regex>
  • <deque>
  • <unordered_map>, <unordered_set>
  • iostreams floating-point

More Work

  • vNext Issues
    • #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 support
  • Remove _app DLLs
  • <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

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