-
Notifications
You must be signed in to change notification settings - Fork 1.6k
vNext Planning
Stephan T. Lavavej edited this page Sep 18, 2025
·
27 revisions
- Multithreading overhaul
- Iterator debugging overhaul (doubly-linked iterator chains, no proxy allocations)
- Still need to overhaul
dequeandvector<bool> - Also simplifies checked/unchecked and modifiable/const, avoiding inheritance (which is non-standard)
- Still need to overhaul
- 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
<regex><deque>-
<unordered_map>,<unordered_set> - iostreams floating-point
-
<tuple>- Specifically, implementing compression and eliminating the recursive inheritance
-
vNext Issues
- Especially this #169 comment.
- #938 P0408R7 Efficient Access To basic_stringbuf's Buffer can be significantly simplified
-
TRANSITION, ABIcomments - Consolidate satellite DLL and import LIB code back into the main DLL (and API loading code like for ICU); make sure to keep
vector/stringetc. out of the DLL/import LIB. - Eradicate the last traces of XP/Vista/etc. support
- Remove
_appDLLs - Drop IDL=1
-
<variant>changes:- Store
index() + 1instead ofindex()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 sovariant<int, int>{in_place_index<0>, 42}andvariant<int, int>{in_place_index<1>, 42}don't collide.
- Store
-
[[no_unique_address]]will be unconditionally available, allowing us to replace_Compressed_pairand improve the representations of more types. -
iomanip.cppdoesn't need to be separately compiled - Unnecessary padding in
_Ctypevec(was #426) - Likely unnecessary padding in
basic_istream - Ensure that
future<const T>andpromise<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
/ALTERNATENAMEmachinery is a trainwreck of complexity; consider removing it - Figure out a "no exceptions" story and clean out the weirdness of
_HAS_EXCEPTIONS=0. - Number-suffixed types (
_Meow2,_Meow3) should be cleaned up. The suffixes allowed us to change representations while avoiding ABI mismatch with the original names.
- 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?
- Bogus std::this_thread::sleep_for implementation
- Intermittent incorrect status returned by std::condition_variable::wait_for
- After calling std::promise::set_value_at_thread_exit, std::future::wait_for is blocked until promise's thread exits
- multiline C++
- VC++: std::exception::what has wrong signature
- TLS is not initialized correctly
- Debug version of STL is not excepion safe and causes terminate() to be called under low memory
- regex engine is extremely poor, resulting in stack overflows and other runtime failures with reasonable input
- size of std::mutex class on x64_86 is 80 bytes
- C++ iostreams over 2 GB doesn't work on x64 platform
- regex complexity exception
- Std::regex_error at memory location
- Bogus std::this_thread::sleep_for implementation
- Grouping within repetition causes regex stack error