Co-authored-by: Casey Carter <cacarter@microsoft.com>
Co-authored-by: Stephan T. Lavavej <stl@microsoft.com>
Co-authored-by: Jakub Mazurkiewicz <mazkuba3@gmail.com>
* PowerShell 7.3.4.
* New pool.
* VS 2022 17.7 Preview 1.
* Require Clang 16.
* Remove workaround for VSO-1753916 'C++23 tuple causes x86chk assertion: !"If lookup found RDSymbol before it should find something this time, too", ParseTree.cpp 10376'.
* Remove workarounds for VSO-1799670 "EDG rejects constexpr vector in debug mode with 'attempt to access expired storage' errors, part 3".
* Remove workarounds for LLVM-44833 "[concepts] deferred substitution into requirements of class template members not implemented".
* [llvm16] Clang has implemented P0960; unskip tests that now pass, and remove workaround in `P2474R2_views_repeat`.
* [llvm16] Clang now warns about overriding `/fp:strict` with `-ffp-contract`. Update `floating_point_model_matrix.lst` to silence these warnings.
* [llvm16] Fix redeclaration of `adjacent_transform_view` (atomic constraint expressions effectively cannot be reproduced since each utterance is distinct).
* [llvm16] Disambiguate `tuple` comparison operators.
* [llvm16] Workaround LLVM-62290, which has been fixed for Clang 17, in `<ranges>`.
* [llvm16] Remove workarounds for a couple of `TRANSITION, Clang 16` issues in `<ranges>` and `<type_traits>`.
* [llvm16] Perma-workaround unfiled clang bug in `P0896R4_views_take`.
* [llvm16 followup] Improve arrow comments.
* [llvm16 followup] We `_EXPORT_STD` both declarations and definitions.
* Disable UBSan to work around GH 3568 "Investigate why Clang/LLVM UBSan doesn't link".
* Guard `_addcarry_u64`/`_subborrow_u64` for Clang.
* `LDBL_DECIMAL_DIG` is now missing for Clang too.
* Although LLVM-46207 is still open, Clang now likes tgmath.h.
* Cite LLVM-62096 "Clang complains about concept depending on itself".
* Add workaround for LLVM-62762 "32-bit-only misoptimization of printf calls on Windows".
* clang-format 16, no manual changes.
The changes are almost entirely positive, with no horrible mangling,
and limited weirdness around `&`, `&&`, and `*`. No need for manual fixups.
* .clang-format: Update link to Clang 16.
* .clang-format: Sort defaults, no behavioral changes.
* .clang-format: Drop commented-out defaults, no behavioral changes.
`BreakBeforeInheritanceComma` and `BreakConstructorInitializersBeforeComma`
were never documented and aren't printed out by `-dump-config` anymore.
The weird empty `BasedOnStyle` isn't printed out by `-dump-config` anymore.
`ConstructorInitializerAllOnOneLineOrOnePerLine` and `AllowAllConstructorInitializersOnNextLine`
are now deprecated and aren't printed out by `-dump-config` anymore.
* .clang-format: `DeriveLineEnding` and `UseCRLF` were deprecated and fused into `LineEnding`, no behavioral changes.
* .clang-format: `AlignTrailingComments` is no longer a bool. Use the new options, no behavioral changes.
* .clang-format: `SortUsingDeclarations` (which we didn't customize) is no longer a bool, no behavioral changes.
* .clang-format: Add new defaults, no behavioral changes.
* .clang-format: `InsertNewlineAtEOF` is new, set it to `true`. Doesn't change any files right now.
* .clang-format: `RemoveSemicolon` is new, set it to `true`.
* clang-format 16, no manual changes - remove semicolons.
---------
Co-authored-by: Casey Carter <Casey@Carter.net>
Towards #182.
- This PR drops all section numbers except for D.x in `<yvals_core.h>`. I decided to cite WG21-N4868 for C++20 deprecation.
- Some citations in `<format>` are intentionally not updated because WG21-P2675R1 and LWG-3631 are not implemented yet.
- Citations in test files are not updated, but I think I'll do it soon.
- Drive-by change: a comment for `move_only_function`'s move assignment operator explaining why it's `noexcept(false)` (see https://github.com/microsoft/STL/pull/3565#discussion_r1134755402 and https://github.com/microsoft/STL/issues/2278#issuecomment-943360927).
---------
Co-authored-by: Stephan T. Lavavej <stl@nuwen.net>
Co-authored-by: Nicole Mazzuca <mazzucan@outlook.com>
Co-authored-by: Casey Carter <cacarter@microsoft.com>
This implements [\[format.string.escaped\]], which is part of WG21-P2286R8 "Formatting Ranges" and modified by WG21-P2713R1 "Escaping Improvements In `std::format`". Works towards #2919.
To implement this feature, two arrays, `__printable_ranges` and `_Grapheme_Extend_ranges`, are added to `__msvc_format_ucd_tables.hpp`.
- `__printable_ranges` represents code points whose [`General_Category`] is in the groups `L`, `M`, `N`, `P`, `S` (that is, code points that are *not* from categories `Z` or `C`), plus the ASCII space character.
- Characters outside of these ranges are always escaped, usually using the `\u{hex-digit-sequence}` format. ([\[format.string.escaped\]/(2.2.1.2.1)])
- It might make sense to store the unmodified `General_Category`, instead of this invented property. This requires more storage and a new data structure, though.
- `_Grapheme_Extend_ranges` represents code points with the Unicode property `Grapheme_Extend=Yes`.
- Characters in these ranges are escaped unless they immediately follow an unescaped character. ([\[format.string.escaped\]/(2.2.1.2.2)])
- It would be more space efficient to reuse the existing data for `Grapheme_Cluster_Break`: `Grapheme_Extend=Yes` is `Grapheme_Cluster_Break=Extend` minus `Emoji_Modifier=Yes`, and `Emoji_Modifier=Yes` is just `1F3FB..1F3FF`. I chose to define a new array for simplicity.
When the literal encoding is not UTF-8, UTF-16, or UTF-32, the set of "separator or non-printable characters" is implementation-defined. In this implementation, the set consists of all characters that correspond to non-printable Unicode code points (that is, code points outside of `__printable_ranges`, see above). If a character is non-printable, it is translated into `\u{XXXX}`, where `XXXX` is the hex value of the Unicode code point (not the original value).
If a code unit sequence cannot be converted to a Unicode scalar value, the `\x{XX}` escape sequence is used.
[`General_Category`]: https://www.unicode.org/reports/tr44/#GC_Values_Table
[\[format.string.escaped\]]: http://eel.is/c++draft/format.string.escaped
[\[format.string.escaped\]/(2.2.1.2.1)]: http://eel.is/c++draft/format.string.escaped#2.2.1.2.1
[\[format.string.escaped\]/(2.2.1.2.2)]: http://eel.is/c++draft/format.string.escaped#2.2.1.2.2